按键匹配两个字典并返回值数组

时间:2015-03-06 11:33:49

标签: python python-3.x

我想要通过键匹配两个词典,以便创建一个新词典,其中dict1中的每个值都是键,并且dict2中每个匹配键值的列表作为输出中的值。这个例子应该不那么令人困惑:

dict1 = {'AAA': 'id5', 'BBB': 'id3', 'CCC': 'id8', 'DDD': 'id3'}
dict2 = {'AAA': 'value8', 'BBB': 'value24', 'CCC': 'value13', 'DDD': 'value2'}

我尝试过:

keys = set(dict1) & set(dict2)
complete = {}
for x in keys:
    key = dict1[x]
    value = dict2[x]
    complete[key] = [value]

输出:

complete = {'id3': ['value24'], 'id5': ['value8'], 'id8': ['value13']}

期望的输出:

complete = {'id3': ['value24', 'value2'], 'id5': ['value8'], 'id8': ['value13']}

实际上字典非常大,因此性能是一个重要因素。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

dict.keys() method返回已充当集合的dictionary view。您需要做的就是结合这些观点。

如果dict1的值不唯一,请使用dict.setdefault()构建值列表:

output = {}
for key in dict1.keys() & dict2.keys():
    output.setdefault(dict1[key], []).append(dict2[key])

演示:

>>> dict1 = {'AAA': 'id5', 'BBB': 'id3', 'CCC': 'id8', 'DDD': 'id3'}
>>> dict2 = {'AAA': 'value8', 'BBB': 'value24', 'CCC': 'value13', 'DDD': 'value2'}
>>> output = {}
>>> for key in dict1.keys() & dict2.keys():
...     output.setdefault(dict1[key], []).append(dict2[key])
... 
>>> output
{'id8': ['value13'], 'id3': ['value24', 'value2'], 'id5': ['value8']}

这和它一样有效。

相关问题