当有重复键时,合并一个键下的所有值

问题描述 投票:0回答:1

我有一个 JSON 对象,其中有重复的键。我想使用“;”将所有值合并为一个键下的字符串。分隔符

输入:

{
"1061": "GROCERY",
"1073": "GM-HBC",
"4220": "PRODUCE",
"958": "MEAT",
"958": "DAIRY",
"958": "FROZEN"
}

所需输出:

{
"1061": "GROCERY",
"1073": "GM-HBC",
"4220": "PRODUCE",
"958": "MEAT;DAIRY;FROZEN"
}

我从这个(link)复制了问题和数据,因为这正是我正在寻找的,除了我想在Python中执行此操作。

python json merge duplicates
1个回答
0
投票

这是使用

itertools.groupby
的解决方案:

from itertools import groupby
import json

def merge_duplicates(pairs):
    for key, duplicate_pairs in groupby(sorted(pairs), lambda x: x[0]):
        yield key, ';'.join(value for _, value in duplicate_pairs)

def parse_with_duplicates(text):
    return json.loads(text, object_pairs_hook=lambda pairs: dict(merge_duplicates(pairs)))

print(parse_with_duplicates("""
{
"1061": "GROCERY",
"1073": "GM-HBC",
"4220": "PRODUCE",
"958": "MEAT",
"958": "DAIRY",
"958": "FROZEN"
}
"""))
# {'1061': 'GROCERY', '1073': 'GM-HBC', '4220': 'PRODUCE', '958': 'DAIRY;FROZEN;MEAT'}
© www.soinside.com 2019 - 2024. All rights reserved.