我想要通过键匹配两个词典,以便创建一个新词典,其中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']}
实际上字典非常大,因此性能是一个重要因素。任何帮助表示赞赏。
答案 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']}
这和它一样有效。