Python版本:3.x
我有两个具有相同键的字典,其值是数组。出于必要的目的,我在这里看到的大多数问题的每个键都只有一个值。我想要的是将这两个字典与值合并为连接数组。也许下面会清除:
我所拥有的:
d1 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0])}
d2 = {(1, "Autumn"): np.array([10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([15.6, 20, 23, 27])}
我尝试过:
d3 = {**d1, **d2}
我想要什么:
d3 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5, 10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0, 15.6, 20, 23, 27])}
我在这里错过了什么吗?请帮忙!
P.S:我看过How to merge two dictionaries in a single expression?。
答案 0 :(得分:4)
如果两个字典中的键始终相同,那么这应该适合您的需求:
d3 = {key:np.hstack([d1[key],d2[key]]) for key in d1.keys()}
输出:
In [7]: d3
Out[7]:
{(1, 'Autumn'): array([ 2.5, 4.5, 7.5, 9.5, 10.2, 13.3, 15.7, 18.8]),
(1, 'Spring'): array([10.5, 11.7, 12.3, 15. , 15.6, 20. , 23. , 27. ])}
但这取决于以下假设:每个键都有一个值,并且每个键都出现在两个字典中。
答案 1 :(得分:2)
我相信您需要像这样的东西:
{key:np.append(d1[key], d2[key]) for key in d1.keys()}
虽然不确定np.append。 而且,当然,只有在字典具有相同键的情况下,它才会起作用。
答案 2 :(得分:2)
尝试一下:
>>> import numpy as np >>> d1 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0])} >>> d2 = {(1, "Autumn"): np.array([10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([15.6, 20, 23, 27])} >>> d3 = {k: np.concatenate((d1.get(k, np.array([])), d2.get(k, np.array([])))) for k in set(d1.keys()).union(set(d2.keys()))} >>> d3 {(1, 'Spring'): array([10.5, 11.7, 12.3, 15. , 15.6, 20. , 23. , 27. ]), (1, 'Autumn'): array([ 2.5, 4.5, 7.5, 9.5, 10.2, 13.3, 15.7, 18.8])}
注释:
答案 3 :(得分:1)
import numpy as np
d1 = {(1, "Autumn"): [2.5, 4.5, 7.5, 9.5], (1, "Spring"): [10.5, 11.7, 12.3, 15.0]}
d2 = {(1, "Autumn"): [10.2, 13.3, 15.7, 18.8], (1, "Spring"): [15.6, 20, 23, 27]}
d3 = {(1, "Autumn"): np.array(d1[(1, "Autumn")] + d2[(1, "Autumn")]), (1,"Spring"): np.array(d1[(1, "Spring")] + d2[(1, "Spring")])}
我最后使用了np.array()
,因为列表和numpy数组之间存在差异。当您在numpy中使用A + B
时,A的每个元素都添加到B的另一个元素数组中。另一方面,当使用A+B
时,A和B是列表,它们彼此连接