Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用公共键/值合并python中的词典_Python_Python 2.7_Dictionary - Fatal编程技术网

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

使用公共键/值合并python中的词典,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我希望将Python中的字典与具有公共值然后是键的字典合并。目前,我有一个令人讨厌的循环。一定有更好的方法 我拥有的是一个字典,其中有一个单数键和该值的数字列表,然后是第二个字典,其中一个键对应于值列表中的一个数字,还有一个与该数字相关联的浮点数。它们的格式如下(尽管要大得多): 我想把它们合并成这样: dict3 = {0:[0.32221, 0.99435, 0.76839, 0.01546], 1:[0.45623, 0.871265, 0.034123, 0.28665]} 有没有比几

我希望将Python中的字典与具有公共值然后是键的字典合并。目前,我有一个令人讨厌的循环。一定有更好的方法

我拥有的是一个字典,其中有一个单数键和该值的数字列表,然后是第二个字典,其中一个键对应于值列表中的一个数字,还有一个与该数字相关联的浮点数。它们的格式如下(尽管要大得多):

我想把它们合并成这样:

dict3 = {0:[0.32221, 0.99435, 0.76839, 0.01546], 1:[0.45623, 0.871265, 0.034123, 0.28665]}

有没有比几个嵌套for循环更简单的方法?任何帮助都将不胜感激

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

>>> 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]}
dict3 = {k: [dict2[i] for i in v] for k, v in dict1.items()}

这将基本上遍历第一个字典中的所有
k/v
-组合。
k
作为生成的字典的键保存,而
v
dict2
中应使用哪些值的所有索引的列表。因此,我们遍历
v
中的元素,从
dict2
中收集我们想要获取的所有项目,将这些项目组合在一个列表中(使用列表理解),并将该结果用作结果字典的值。

您可以使用dict理解中的嵌套列表理解来实现这一点:

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

这将基本上遍历第一个字典中的所有
k/v
-组合。
k
作为生成的字典的键保存,而
v
dict2
中应使用哪些值的所有索引的列表。因此,我们遍历
v
中的元素,并从
dict2
中收集我们想要获取的所有项目,将这些项目组合在一个列表中(使用列表理解),并使用该结果作为结果字典的值。

还有另一个字典理解,但是使用map

dict3={k: map(lambda x: dict2[x],dict1[k]) for k in dict1.iterkeys()}

还有另一本字典,但有地图

dict3={k: map(lambda x: dict2[x],dict1[k]) for k in dict1.iterkeys()}

以什么方式合并它们?我真的看不出这些数字之间有什么明显的关联。以什么方式合并它们?我真的看不出这些数字之间有什么明显的相关性。优雅完美!谢谢,哇。优雅完美!谢谢。你得到了与上面@poke相同的答案。非常感谢。你得到了与上面@poke相同的答案。非常感谢。