首页 文章

合并嵌套词典列表

提问于
浏览
0

我有两个词典列表,如下例所示

list1=[
        {
            "pdpData":{
                "a":1,
                "b":2
            }
        }
    ]

list2=[
    {
        "pdpData":{
            "a":1,
            "c":3
        }
    },
    {
        "pdpData":{
            "a":2,
            "b":3
        }
    }
]

我希望结果如下面的格式所示

list3=[
{
    "pdpData":{
        "a":1,
        "b":2,
        "c":3
    }
},
{
    "pdpData":{
        "a":2,
        "b":3
    }
}
]

list1和list2的大小可以是10000 . List3将是list1和list2的并集 . 什么是解决这个问题的最好的pythonic解决方案 .

2 回答

  • 0

    你没有写一个完整的解决方案 . 你需要zip_longestdict merging .

    from itertools import zip_longest
    
    list1=[
            {
                "pdpData":{
                    "a":1,
                    "b":2
                }
            }
        ]
    
    list2=[
        {
            "pdpData":{
                "a":1,
                "c":3
            }
        },
        {
            "pdpData":{
                "a":2,
                "b":3
            }
        }
    ]
    
    
    for d1, d2 in zip_longest(list1, list2):
        dd1 = d1.get("pdpData", {}) if d1 else {}
        dd2 = d2.get("pdpData", {}) if d2 else {}
        print({**dd1, **dd2})
    

    它输出:

    {'a': 1, 'b': 2, 'c': 3}
    {'a': 2, 'b': 3}
    

    现在您已经合并了内部词,您需要做的就是将它们打包到另一个 dict 中,并将 "pdpData" 作为键,然后将这些词组打包到列表中 .

  • 1
    from collections import defaultdict
    
    d = defaultdict(dict)
    for l in (l1, l2):
        for elem in l:
            d[elem['pdpData']['a']].update(elem['pdpData'])
    l3 = d.values()
    
    print(l3)
    

    产量

    dict_values([{'a': 1, 'b': 2, 'c': 3}, {'a': 2, 'b': 3}])
    

相关问题