我有一个元组列表。元组包含文件名和下载 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']}
如有任何帮助,我们将不胜感激。
最佳答案
如果您想要与每个唯一文件关联的唯一 url,您可以使用 set
的 dict
,其中 dict
是您的文件名,值是 url 的集
。使用集合可确保仅保留唯一的 url。
为了更容易地向 dict
添加 url,您可以使用 defaultdict
,它在添加新键时具有默认行为。在这种情况下,默认行为应该是创建一个空的 set
来添加 url。
要添加您的数据,请循环遍历您的 (file, url) 元组列表,将每个 url 添加到与该文件关联的 url 集中。
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
遍历 (key,value) 对来处理内容,并使用内部循环处理各个 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
关于python - 字典 python 中的匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809819/