我正在尝试根据键合并列表中的词典列表。相同的示例输入如下:
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
答案 0 :(得分:2)
我采用的方法是使用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)