使用公共键/值合并python中的字典

时间:2013-05-29 21:11:22

标签: python python-2.7 dictionary

我希望将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循环更简单的方法?任何帮助都会受到大力赞赏!

3 个答案:

答案 0 :(得分:3)

您可以使用dict理解中的嵌套列表理解来执行此操作:

dict3 = {k: [dict2[i] for i in v] for k, v in dict1.items()}

这将基本遍历第一个字典中的所有k/v - 组合。 k保留为结果字典的关键字,vdict2中应使用哪些值的所有索引的列表。因此,我们遍历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()}