I need to merge two dictionaries d1 and d2, where:
JavaScript
x
8
1
d1 = {0: [array([ 42.9017, -78.6631]), array([ 41.5372, -74.0526]), array([ 39.8017, -89.6437])],
2
1: [array([ 34.7269, -86.5673]), array([ 29.7229, -98.0742])],
3
2: [array([ 35.9878, -115.1167]), array([ 34.0316, -117.6187])],array([ 61.6303, -148.9872])]}
4
5
d2 = {0: [array([5, 5], dtype=int64), array([44, 44], dtype=int64),array([1, 1], dtype=int64)],
6
1: [array([1, 1], dtype=int64), array([12, 12], dtype=int64), array([1, 1], dtype=int64)],
7
2: [array([1, 1], dtype=int64), array([12, 12], dtype=int64), array([1, 1], dtype=int64)]}
8
I need dictionary d3 after merging d1 and d2, such that, 1st value of key:0 of d1 is merged with 1st value of key:0 of d2.
Expecting d3 as:
JavaScript
1
4
1
d3 = {0: [array([ 42.9017, -78.6631]), array([5, 5], dtype=int64), array([ 41.5372, -74.0526]), array([44, 44], dtype=int64) , array([ 39.8017, -89.6437]), array([1, 1], dtype=int64)],
2
1: [array([ 34.7269, -86.5673]), array([1, 1], dtype=int64), array([ 29.7229, -98.0742]), array([12, 12], dtype=int64)],
3
2: [array([ 35.9878, -115.1167]),array([1, 1], dtype=int64),array([1, 1], dtype=int64), array([12, 12], dtype=int64), array([ 34.0316, -117.6187])],array([1, 1], dtype=int64), array([ 61.6303, -148.9872])]}
4
I have tried multiple approaches, but nothing seems to work appropriately. Any help is much appreciated! Thanks!
Advertisement
Answer
I hope I’ve understood your question well. You can use itertools.zip_longest
to alternate between the values from the two dictionaries:
JavaScript
1
13
13
1
from itertools import zip_longest
2
3
out = {}
4
for k in d1.keys() | d2.keys():
5
for v1, v2 in zip_longest(d1.get(k, []), d2.get(k, [])):
6
out.setdefault(k, [])
7
if not v1 is None:
8
out[k].append(v1)
9
if not v2 is None:
10
out[k].append(v2)
11
12
print(out)
13
Prints:
JavaScript
1
26
26
1
{
2
0: [
3
array([42.9017, -78.6631]),
4
array([5, 5]),
5
array([41.5372, -74.0526]),
6
array([44, 44]),
7
array([39.8017, -89.6437]),
8
array([1, 1]),
9
],
10
1: [
11
array([34.7269, -86.5673]),
12
array([1, 1]),
13
array([29.7229, -98.0742]),
14
array([12, 12]),
15
array([1, 1]),
16
],
17
2: [
18
array([35.9878, -115.1167]),
19
array([1, 1]),
20
array([34.0316, -117.6187]),
21
array([12, 12]),
22
array([61.6303, -148.9872]),
23
array([1, 1]),
24
],
25
}
26