在python词典中匹配值

2024-09-18 16:48:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表。元组包含文件名和下载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']}

任何帮助都将不胜感激。你知道吗


Tags: 文件csvurl列表字典文件名current元组
1条回答
网友
1楼 · 发布于 2024-09-18 16:48:21

如果您想要与每个唯一文件关联的唯一url,可以使用dictset,其中dict的键是您的文件名,值是set的url。使用集合可以确保只保留唯一的url。你知道吗

为了使向dict添加url更容易,可以使用defaultdict,它在添加新键时具有默认行为。在这种情况下,默认行为应该是创建一个空的set,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'])})

一旦构建了字典,就可以通过使用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

相关问题 更多 >