python - 字典 python 中的匹配值

标签 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']}

如有任何帮助,我们将不胜感激。

最佳答案

如果您想要与每个唯一文件关联的唯一 url,您可以使用 setdict,其中 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/

相关文章:

python - 将值插入文本小部件并删除先前的值 - Tkinter

python - 装饰器可以在运行时使用 lambda 表达式吗?

python - 如何访问包含字典中特定项目的列表?

python - 如何从字典中输出值而不将其打印为列表?

c# - 将字典转换为 C# 中的对象列表

python - 如何通过 Python 3.5.1 创建永久性 MS Access 查询?

python - 使用 JSONField() 获取 non_field_errors

Java FizzBu​​zz 递归解决方案

r - 垂直计算多个列表的中位数

for-loop - Julia:具有大数据移动的并行 For 循环