基于公共元素的python词典合并

2024-06-26 09:56:53 发布

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

我有一个类似于python的字典列表

# Input
data = [{'name':'a','val1':23},{'name':'a','val2':45},{'name':'a','val4':'56'},{'name':'b','val10':12},{'name':'b','val45':45},{'name':'b','val100':23}]```

如何将上面的字典展平为下面的格式

预期结果

[{'name':'a','val1':23,'val2':45,'val4':56},{'name':'b','val10':12,'val45':45,'val100':23}]```

Tags: name列表inputdata字典格式val1val2
2条回答

您还可以使用^{} function

import itertools

data = [{'name': 'a', 'val1': 23},
 {'name': 'a', 'val2': 45},
 {'name': 'a', 'val4': '56'},
 {'name': 'b', 'val10': 12},
 {'name': 'b', 'val45': 45},
 {'name': 'b', 'val100': 23}]
 
results = []
for _, values in itertools.groupby(data, lambda x: x['name']):
    results.append({k: v for value in values for k, v in value.items()})
    
print(results)

输出

[{'name': 'a', 'val1': 23, 'val2': 45, 'val4': '56'},
 {'name': 'b', 'val10': 12, 'val100': 23, 'val45': 45}]

请注意,只有当您的data按名称as @jizhihaoSAMA noted排序时,上述方法才有效。如果不是,你可以做

data.sort(key=lambda x: x['name'])

在应用此方法之前

  1. 如果在result中找到相同的namedict,则更新它,否则创建它
  2. 将格式转换为所需的格式

code:

datas = [{'name':'a','val1':23},{'name':'a','val2':45},{'name':'a','val4':'56'},{'name':'b','val10':12},{'name':'b','val45':45},{'name':'b','val100':23}]
result = {}
for data in datas:
    key = data["name"]
    data.pop("name")
    if key in result:
        result[key].update(data)
    else:
        result[key] = data
ans = []
for name,val in result.items():
    temp = {"name":name}
    for k,v in val.items():
        temp.update({k:v})
    ans.append(temp)
print(ans)

result:

[
    {"name": "a", "val1": 23, "val2": 45, "val4": "56"},
    {"name": "b", "val10": 12, "val45": 45, "val100": 23},
]

相关问题 更多 >