Python中如何合并字典列表中不同键的值

有个字典列表是这样:
l = [
{“name”: “mqx”, “url”: “www.google.com”},
{“name”: “mqx”, “url”: “www.baidu.com”},
{“name”: “other”, “url”: “www.baidu.com”},
]
希望的输出是:
output = [
{“name”: “mqx”, “url”: [“www.google.com”, “www.baidu.com”]},
{“name”: “other”, “url”: “www.baidu.com”},
]

请问有什么好的方法吗,希望大神不令赐教
Python中如何合并字典列表中不同键的值


6 回复

遍历后放入字 list 而不是字符串


在Python里合并字典列表中不同键的值,核心思路是用一个字典来收集结果,遍历列表中的每个字典,然后根据键来累加或合并值。

假设你有一个字典列表,每个字典的键可能不同,你想把所有字典里相同键的值合并到一起。比如,把[{'a': 1}, {'b': 2, 'a': 3}, {'c': 4}]变成{'a': [1, 3], 'b': [2], 'c': [4]}

下面是一个通用的方法:

def merge_dict_list(dict_list):
    result = {}
    for d in dict_list:
        for key, value in d.items():
            # 如果键不存在,初始化一个空列表
            if key not in result:
                result[key] = []
            # 将值添加到对应键的列表中
            result[key].append(value)
    return result

# 示例
data = [{'a': 1}, {'b': 2, 'a': 3}, {'c': 4}]
merged = merge_dict_list(data)
print(merged)  # 输出: {'a': [1, 3], 'b': [2], 'c': [4]}

如果你希望合并时不是收集成列表,而是进行其他操作(比如求和),可以稍微修改一下。例如,合并时对数值求和:

def merge_dict_list_sum(dict_list):
    result = {}
    for d in dict_list:
        for key, value in d.items():
            result[key] = result.get(key, 0) + value
    return result

# 示例:假设值都是数字
data = [{'a': 1}, {'b': 2, 'a': 3}, {'c': 4}]
merged_sum = merge_dict_list_sum(data)
print(merged_sum)  # 输出: {'a': 4, 'b': 2, 'c': 4}

第一个函数是最常用的,它把每个键对应的所有值都存到一个列表里,保持了原始数据的顺序(按遍历顺序追加)。第二个函数则是一个变体,演示了如何根据需求改变合并策略。

总结:用一个结果字典循环收集就行。

<br>from collections import defaultdict<br>d = defaultdict(list)<br>for i in l:<br> d[i['name']].append(i['url'])<br>output = [{"name": i[0], "url": i[1]} for i in d.items()]<br>

感谢大神!

pandas groupby

如果仅仅是输出,就没必要用 pandas
不过如果像这种二维变三维,还有后续计算,可以试试 pandas

from itertools import groupby
print([{k: [item[“url”] for item in v]} for k, v in groupby(l, key=lambda item: item[“name”])])

回到顶部