【发布时间】:2015-03-06 11:33:49
【问题描述】:
我有两个要按键匹配的字典,以便创建一个新字典,其中 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']}
实际上,字典非常大,因此性能是一个重要因素。任何帮助表示赞赏。
【问题讨论】:
-
为什么
'id3'不是唯一的? -
@PadraicCunningham:这就是重点;一开始我也误解了,但是来自
dict1的 values 是输出中的 keys,与另一个字典中的值配对。 -
@MartijnPieters。是的,但是
id3出现了两次,所以键应该是id5和id8通过 创建一个新字典,其中 dict1 中的每个唯一值作为键 -
应该使用一个重复实例。我只是不想以多个 'id3' 结束。
-
@PadraicCunningham:啊,是的,措辞选择不当。这些值不是唯一的。不过意图很明确。每个值都应该创建一个唯一的键,重复项折叠成一个值列表。
标签: python python-3.x