列表内相同值字典合并

列表内相同值字典合并

题目

原数据是以下列表,每个元素是一个字典,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

回到顶部