列表内相同值字典合并
题目
原数据是以下列表,每个元素是一个字典,key是一样的。
li=[{'sw': '44','port': 1}, {'sw': '44', 'port': 2}, {'sw': '45', 'port': 21}, {'sw': '45', 'port': 22}, {'sw': '46', 'port': 2}]
期待的结果
要求是把key为‘sw’的值相同的字典合并成一个,port变为列表[1, 2]
[{'sw': '44','port': [1, 2]}, {'sw': '45', 'port': [21, 22]},{'sw': '46', 'port': [2]}]
回答:
没想到什么一步到位的好方法,建个字典统计不同的sw的port,再遍历字典得到最终目标数组。
python">def transform(list): result = {}
for item in list:
result.setdefault(item['sw'], []).append(item['port'])
return [{'sw': key, 'port': value} for key, value in result.items()]
Update: 支持任意多的key。
其实也没啥特别的,就是再遍历一遍把除主键之外的key都加到字典,核心思想都是一样的。
def transform(list, primary_key): result = {}
keys = [key for key in list[0].keys() if key != primary_key]
for item in list:
target = result.setdefault(item[primary_key], {key: set() for key in keys})
for key in keys:
target[key].add(item[key])
return [
{
primary_key: key,
}
| {k: [*v] for k, v in value.items()}
for key, value in result.items()
]
list = [
{"sw": "44", "loc": "G1", "port": 1},
{"sw": "44", "loc": "G1", "port": 2},
{"sw": "45", "loc": "G2", "port": 21},
{"sw": "45", "loc": "G2", "port": 22},
{"sw": "46", "loc": "G3", "port": 2},
]
print(transform(list, "sw"))
# => [{'sw': '44', 'loc': ['G1'], 'port': [1, 2]}, {'sw': '45', 'loc': ['G2'], 'port': [21, 22]}, {'sw': '46', 'loc': ['G3'], 'port': [2]}]
以上是 列表内相同值字典合并 的全部内容, 来源链接: utcz.com/p/938309.html