我希望将Python中的字典与具有共同值然后键的字典合并。目前,我在循环内部的循环中有一个讨厌的循环。必须有一个更好的方法...
我所拥有的是一个带有单个数字键的字典和该值的数字列表,然后是第二个字典,其中的键对应于值列表中的一个数字以及与该数字相关联的浮点数。它们的格式如下(虽然大得多):
dict1 = {0:[3, 5, 2, 7], 1:[1, 4, 0, 6]}
dict2 = {0:0.34123, 1:0.45623, 2:0.76839, 3:0.32221, 4:0.871265, 5:0.99435, 6:0.28665, 7:0.01546}
我想将它们合并,看起来像这样:
dict3 = {0:[0.32221, 0.99435, 0.76839, 0.01546], 1:[0.45623, 0.871265, 0.034123, 0.28665]}
是否有比单个嵌套for循环更简单的方法?任何帮助都会受到大力赞赏!
答案 0 :(得分:3)
您可以使用dict理解中的嵌套列表理解来执行此操作:
dict3 = {k: [dict2[i] for i in v] for k, v in dict1.items()}
这将基本遍历第一个字典中的所有k/v
- 组合。 k
保留为结果字典的关键字,v
是dict2
中应使用哪些值的所有索引的列表。因此,我们遍历v
中的元素并收集我们想要的dict2
中的所有项目,将它们组合在一个列表中(使用列表推导)并将该结果用作结果字典的值。
答案 1 :(得分:2)
>>> dict1 = {0:[3, 5, 2, 7], 1:[1, 4, 0, 6]}
>>> dict2 = {0:0.34123, 1:0.45623, 2:0.76839, 3:0.32221, 4:0.871265, 5:0.99435, 6:0.28665, 7:0.01546}
>>> {k:[dict2[m] for m in v] for k, v in dict1.items()}
{0: [0.32221, 0.99435, 0.76839, 0.01546], 1: [0.45623, 0.871265, 0.34123, 0.28665]}
答案 2 :(得分:0)
还有另一个词典理解,但有地图......
dict3={k: map(lambda x: dict2[x],dict1[k]) for k in dict1.iterkeys()}