我有一个元组列表。元组包含文件名和下载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']}
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
如果您希望与每个唯一文件关联的唯一网址,则可以使用application.js
dict
个set
的密钥,其中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