0

我希望将 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 循环更简单的方法来做到这一点?任何帮助将不胜感激!

4

3 回答 3

3

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

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

这将基本上遍历k/v第一个字典中的所有 -combinations。k保留作为结果字典的键,并且是应使用值v的所有索引的列表。dict2所以我们遍历其中的元素v并收集dict2我们想要获取的所有项目,将它们组合在一个列表中(使用列表推导式)并将该结果用作结果字典的值。

于 2013-05-29T21:17:27.523 回答
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]}
于 2013-05-29T21:17:25.720 回答
0

还有另一个字典理解,但使用地图......

dict3={k: map(lambda x: dict2[x],dict1[k]) for k in dict1.iterkeys()}
于 2013-05-29T21:35:51.520 回答