Python version: 3.x
I have two dictionaries with same keys and the values are arrays. Most of the questions I saw here, for the required purpose, have only one value
If you always have the same keys in both dicts, this should fit your needs:
d3 = {key:np.hstack([d1[key],d2[key]]) for key in d1.keys()}
Outputs:
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. ])}
But this relies on the assumption, that for every key there is a value and that every key appears in both dicts.
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")])}
I used the np.array()
in the end because there is difference between lists and numpy arrays. When you use the A + B
in numpy, each element of the A added to the array other element of the B. On the other hand, when use A+B
where A and B are lists, they join each other.
Try this:
>>> 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])}
Notes:
I believe you need smth like:
{key:np.append(d1[key], d2[key]) for key in d1.keys()}
Not sure about np.append though. And, of course, it will work only if dicts have the same keys.