gpt4 book ai didi

python - 按公共(public)键合并字典列表

转载 作者:行者123 更新时间:2023-12-01 02:04:52 25 4
gpt4 key购买 nike

我正在尝试根据键将字典列表合并到列表中。其示例输入如下所示:

my_data = {
"id_1": [
{"er": {"ip": "myhost", "port": 80}},
{"ef": {"ip": "myhost", "port": 80}},
{"er": {"app": "falsk", "port1": 81}},
{"ef": {"app": "django", "port1": 85}}
],
"id_2": [
{"er": {"ip": "myhost", "port": 80}},
{"ef": {"ip": "myhost", "port": 80}},
{"er": {"app": "falsk"," port1": 81}},
{"ef": {"app": "django", "port1": 85}}
]
}

我试图得到如下所示的输出:

res_data = {
"id_1": [
{"er": {"ip": "myhost", "port": 80, "app": "falsk"," port1": 81}},
{"ef": {"ip": "myhost", "port": 80, "app": "django", "port1": 85}}
],
"id_2": [
{"er": {"ip": "myhost", "port": 80, "app": "falsk", "port1": 81}},
{"ef": {"ip": "myhost", "port": 80, "app": "django", "port1": 85}}
]
}

Python中有没有简单的方法可以实现它?

更新:基于评论和初步想法的解决方案

def merge_list_of_dict(data):
merged_dict = dict()

for k, v in data.items():

tmp_tems = dict()
for j in v:
for ki, vi in j.items():
if ki in tmp_tems:
tmp_tems[ki].update(vi)
else:
tmp_tems[ki] = vi
merged_dict[k] = tmp_tems
return merged_dict

最佳答案

我采取的方法是使用 update 构建一个临时字典,以根据键合并字典。然后,我创建一个 output 字典,然后打印它,以返回到 list 格式。如果您想跳过该步骤,可以直接在每个循环上打印 {'entry': [tmpdict]} 。我使用了 pprint 来使输出清晰,但它显然是可选的。

import pprint

my_data= {'id_1': [{'er': {'ip': 'myhost', 'port': 80}},
{'ef': {'ip': 'myhost', 'port': 80}},
{'er': {'app': 'falsk', 'port1': 81}},
{'ef': {'app': 'django', 'port1': 85}}],
'id_2': [{'er': {'ip': 'myhost', 'port': 80}},
{'ef': {'ip': 'myhost', 'port': 80}},
{'er': {'app': 'falsk', 'port1': 81}},
{'ef': {'app': 'django', 'port1': 85}}]}

output = {}
for entry, data in my_data.items():
tmpdict = {}
for item in data:
for k,v in item.items():
if not k in tmpdict:
tmpdict[k] = {}
tmpdict[k].update(v)

output[entry] = [tmpdict]

pprint.pprint(output)

关于python - 按公共(public)键合并字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com