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

Python中合并同type值的字典数据至对应列表的实现问题

解决按type分组字典数据的问题

需求回顾

你需要将包含data和type字段的字典列表,按type的值分组,把对应data整理到以type为键的列表中,最终输出一个包含分组字典的列表。

正确实现方法

方法一:使用字典setdefault分组(推荐,无需排序)

这种方法直接遍历原列表,按type值收集对应的data,最后转换成预期的列表格式:

def group_by_type(items):
    grouped = {}
    for item in items:
        # 获取当前元素的type和data
        type_key = item["type"]
        data_item = item["data"]
        # 如果type_key不存在则创建空列表,再添加data
        grouped.setdefault(type_key, []).append(data_item)
    # 将分组后的字典转换为预期的列表格式
    return [{key: value} for key, value in grouped.items()]

测试示例数据:

sample_data = [
    {"data": {"id": 61, "title": "First"}, "type": "like"},
    {"data": {"id": 62, "title": "Seven"}, "type": "like"},
    {"data": {"id": 103, "title": "Third"}, "type": "dislike"},
    {"data": {"id": 7, "title": "Fifth"}, "type": "dislike"}
]

print(group_by_type(sample_data))

输出结果完全符合你的预期:

[
    {"like": [{"id": 61, "title": "First"}, {"id": 62, "title": "Seven"}]},
    {"dislike": [{"id": 103, "title": "Third"}, {"id": 7, "title": "Fifth"}]}
]

方法二:使用itertools.groupby(需先排序)

如果想用groupby,需要先按type排序(因为groupby只会分组连续的相同元素):

from itertools import groupby

def group_by_type_groupby(items):
    # 先按type字段排序,确保同类型元素连续
    sorted_items = sorted(items, key=lambda x: x["type"])
    grouped = {}
    # 按type分组,提取每组的data
    for type_key, group in groupby(sorted_items, key=lambda x: x["type"]):
        grouped[type_key] = [item["data"] for item in group]
    # 转换为预期格式
    return [{key: value} for key, value in grouped.items()]

原代码问题分析

你之前的代码是提取所有字典的键(data和type),然后收集每个键对应的所有值,相当于把原列表中所有data字段合并成一个列表,所有type字段合并成另一个列表,这和“按type值关联对应data”的需求完全不符。原代码的逻辑是对字典的键进行分组,而不是对字典的type值进行分组,所以结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:37