python字典中的匹配值
我有一个元组列表。元组包含文件名和下载url。 我已经从csv文件导入了这些文件名和下载url,许多文件名和下载url对是相同的,但有些不是 我需要将这些元组添加到字典中,而不需要对文件名进行双重设置,但要确保收集所有唯一的下载URL。我想关键可能是文件名,值可能是该文件所有唯一下载URL的列表。我对python还是很陌生,所以在完成这项工作时遇到了一些问题 鉴于:python字典中的匹配值,python,list,dictionary,Python,List,Dictionary,我有一个元组列表。元组包含文件名和下载url。 我已经从csv文件导入了这些文件名和下载url,许多文件名和下载url对是相同的,但有些不是 我需要将这些元组添加到字典中,而不需要对文件名进行双重设置,但要确保收集所有唯一的下载URL。我想关键可能是文件名,值可能是该文件所有唯一下载URL的列表。我对python还是很陌生,所以在完成这项工作时遇到了一些问题 鉴于: current_list = [('filename1', 'url1'), ('filename1', 'url2'), ('f
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
s的dict
,其中dict
的键是您的文件名,值是set
s的URL。使用集合可以确保只保留唯一的URL
要使将URL添加到dict
更容易,可以使用defaultdict
,它在添加新键时具有默认行为。在这种情况下,默认行为应该是创建一个空的集合
,url将添加到该集合中
要添加数据,请遍历(文件、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'])})
继续解决您的问题,直到您有了示例输入、所需的输出以及您为解决问题而编写的实际代码。@shakfu欢迎使用堆栈溢出!很高兴我能帮上忙--你还需要其他帮助吗?如果我已经完全回答了你的问题,你可以选择“接受”答案。我还有一个问题。我希望在将所有这些url添加到字典后,我能够使用urllib捕获每个url并单独下载。甚至不知道从哪里开始。我想我应该告诉我们的模块是urllib,但我似乎无法从值集中提取字符串“www.someurl.com/exename.exe”。我想我会用for循环遍历每个键的值集?然后分别拉动字符串?@shakfu我添加了一些代码来显示如何访问这些项目。那有帮助吗?是的,非常感谢。。为了一切。从现在开始,当我在这里提问时,我会尽量坚持正确的格式。
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