You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现:基于name值合并列表中的字典

按name分组合并字典列表的Python实现

嘿,这个需求我经常碰到,咱们一步步来解决它!先明确下你的需求:你有一个包含多个字典的列表,每个字典都有name、url、location三个键——其中name可能重复,但url和location都是唯一的。你需要把相同name的字典合并,把对应的url和location分别整理成列表。

比如你的输入示例:

original_list = [
    {"name":"A1", "url":"B1", "location":"C1"},
    {"name":"A1", "url":"B2", "location":"C2"},
    {"name":"A2", "url":"B3", "location":"C3"},
    {"name":"A2", "url":"B4", "location":"C4"}
]

期望得到的结果应该是这样的:

result_list = [
    {"name":"A1", "urls":["B1", "B2"], "locations":["C1", "C2"]},
    {"name":"A2", "urls":["B3", "B4"], "locations":["C3", "C4"]}
]

下面给你两种实用的实现方法:

方法一:用collections.defaultdict(推荐,代码更简洁)

defaultdict是Python标准库collections里的工具,能帮我们自动初始化字典的默认值,非常适合分组场景。

from collections import defaultdict

original_list = [
    {"name":"A1", "url":"B1", "location":"C1"},
    {"name":"A1", "url":"B2", "location":"C2"},
    {"name":"A2", "url":"B3", "location":"C3"},
    {"name":"A2", "url":"B4", "location":"C4"}
]

# 初始化一个defaultdict,每个键对应的值是包含urls和locations的字典
grouped = defaultdict(lambda: {"urls": [], "locations": []})

for item in original_list:
    name = item["name"]
    # 把当前item的url和location添加到对应name的列表里
    grouped[name]["urls"].append(item["url"])
    grouped[name]["locations"].append(item["location"])

# 把defaultdict转换成期望的列表格式
result_list = [{"name": k, **v} for k, v in grouped.items()]

print(result_list)

方法二:用普通字典(无需导入模块)

如果不想额外导入库,用普通字典也能实现,只是需要手动判断键是否存在:

original_list = [
    {"name":"A1", "url":"B1", "location":"C1"},
    {"name":"A1", "url":"B2", "location":"C2"},
    {"name":"A2", "url":"B3", "location":"C3"},
    {"name":"A2", "url":"B4", "location":"C4"}
]

grouped = {}

for item in original_list:
    name = item["name"]
    if name not in grouped:
        # 如果name还没在字典里,初始化对应的urls和locations列表
        grouped[name] = {"urls": [], "locations": []}
    grouped[name]["urls"].append(item["url"])
    grouped[name]["locations"].append(item["location"])

# 转换为结果列表
result_list = [{"name": k, **v} for k, v in grouped.items()]

print(result_list)

两种方法最终都会输出你想要的分组结果,你可以根据自己的场景选择~

内容的提问来源于stack exchange,提问作者SY9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:57