在字典python中匹配值

时间:2015-04-22 22:08:16

标签: python list dictionary

我有一个元组列表。元组包含文件名和下载URL。 我已经从csv文件中导入了这些文件名和下载URL,并且许多文件名,下载URL对都是相同的,但有些不是。

我需要将这些元组添加到字典中,而不会创建文件名的双倍,但要确保收集所有唯一的下载URL。我认为密钥可能是文件名,值将是该文件的所有唯一下载URL的列表。我仍然是python的新手,所以我在完成这个问题时遇到了问题。

鉴于:

current_list = [('filename1', 'url1'), ('filename1', 'url2'), ('filename1', 'url3'), 
                ('filename2', 'url1'), ('filename2', 'url2'), ('filename2', 'url3')]

我需要的词典:

result = {'filename1' : ['url1', 'url2', 'url3'],
          'filename2' : ['url1', 'url2', 'url3']}

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您希望与每个唯一文件关联的唯一网址,则可以使用application.js dictset的密钥,其中dict的密钥是您的文件名,值为set个网址。使用集合可确保仅保留唯一的URL。

要更轻松地向dict添加网址,您可以使用defaultdict,其在添加新密钥时具有默认行为。在这种情况下,默认行为应该是创建一个空的set,其中将添加网址。

要添加数据,请遍历您的(文件,网址)元组列表,将每个网址添加到与该文件关联的网址集。

from collections import defaultdict

current_list = [('file1', 'url1'), ('file1', 'url2'), ('file1', 'url3'), 
                ('file2', 'url4'), ('file2', 'url5'), ('file2', 'url6')]

result = defaultdict(set)

for file_name, url in current_list:
    result[file_name].add(url)

print result
# prints:
# defaultdict(<type 'set'>, {'file2': set(['url5', 'url4', 'url6']), 'file1': set(['url1', 'url3', 'url2'])})

一旦构建了字典,就可以通过使用iteritems循环(键,值)对来处理内容,并使用内部循环处理各个URL:

for file_name, url_set in result.iteritems():

    # do something with file_name here...
    print file_name

    # access urls like this:
    for url in url_set:
        print url