如何使用Python组合JSON数据相同键的所有值

2024-04-23 21:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python组合JSON数据相同键的所有值。任何援助之手都将不胜感激。 请查看以下输入数据:

{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTCOY': 'A'}}}
{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTPFX': 'CN'}}}
{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTNUM': '50003159'}}}

我想要的输出格式:

{
"MESSAGE_DATA": {
    "BGEN_CENQO_XTRA_KEY": {
        "BGEN_CENQO_CLNTCOY": "A",
        "BGEN_CENQO_CLNTPFX": "CN",
        "BGEN_CENQO_CLNTNUM": "50003159"
    }
}

}


1条回答
网友
1楼 · 发布于 2024-04-23 21:15:05

this answer略微更改代码:

from functools import reduce

lst = [{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTCOY': 'A'}}},
{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTPFX': 'CN'}}},
{'MESSAGE_DATA': {'BGEN_CENQO_XTRA_KEY': {'BGEN_CENQO_CLNTNUM': '50003159'}}}]

def merge(a, b, path=None):
    if path is None: path = []
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            elif a[key] == b[key]:
                pass 
            else:
                raise Exception('Conflict at %s' % '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

d = reduce(merge, lst)

字典d的结构将是:

{'MESSAGE_DATA': {
    'BGEN_CENQO_XTRA_KEY': {
       'BGEN_CENQO_CLNTCOY': 'A',
       'BGEN_CENQO_CLNTNUM': '50003159',
       'BGEN_CENQO_CLNTPFX': 'CN'
     }
}}

相关问题 更多 >