繁体   English   中英

如何在python中合并两个具有相同键和数组类型值的嵌套字典?

[英]How to merge two nested dictionaries in python, which have same keys and have array type values?

我需要合并两个字典 d1 和 d2,其中:

d1 = {0: [array([ 42.9017, -78.6631]), array([ 41.5372, -74.0526]), array([ 39.8017, -89.6437])], 
  1: [array([ 34.7269, -86.5673]), array([ 29.7229, -98.0742])],
  2: [array([  35.9878, -115.1167]), array([  34.0316, -117.6187])],array([  61.6303, -148.9872])]}

d2 = {0: [array([5, 5], dtype=int64), array([44, 44], dtype=int64),array([1, 1], dtype=int64)], 
  1: [array([1, 1], dtype=int64), array([12, 12], dtype=int64), array([1, 1], dtype=int64)],
  2: [array([1, 1], dtype=int64), array([12, 12], dtype=int64), array([1, 1], dtype=int64)]}

合并 d1 和 d2 后,我需要字典 d3,这样,d1 的 key:0 的第一个值与 d2 的 key:0 的第一个值合并。

期望 d3 为:

  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)], 
  1: [array([ 34.7269, -86.5673]), array([1, 1], dtype=int64), array([ 29.7229, -98.0742]), array([12, 12], dtype=int64)],
  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])]}

我尝试了多种方法,但似乎没有任何方法可以正常工作。 任何帮助深表感谢! 谢谢!

如果您确定两个dict具有相同的键,并且您不关心d1d2值中的元素以何种顺序出现在其对应的d3值中,那么它就像

d3 = {k: d1[k]+d2[k] for k in d1}

我希望我已经很好地理解了你的问题。 您可以使用itertools.zip_longest在两个字典中的值之间交替

from itertools import zip_longest

out = {}
for k in d1.keys() | d2.keys():
    for v1, v2 in zip_longest(d1.get(k, []), d2.get(k, [])):
        out.setdefault(k, [])
        if not v1 is None:
            out[k].append(v1)
        if not v2 is None:
            out[k].append(v2)

print(out)

印刷:

{
    0: [
        array([42.9017, -78.6631]),
        array([5, 5]),
        array([41.5372, -74.0526]),
        array([44, 44]),
        array([39.8017, -89.6437]),
        array([1, 1]),
    ],
    1: [
        array([34.7269, -86.5673]),
        array([1, 1]),
        array([29.7229, -98.0742]),
        array([12, 12]),
        array([1, 1]),
    ],
    2: [
        array([35.9878, -115.1167]),
        array([1, 1]),
        array([34.0316, -117.6187]),
        array([12, 12]),
        array([61.6303, -148.9872]),
        array([1, 1]),
    ],
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM