我有一个 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中执行此操作。
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'}