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

嵌套列表处理:合并相同产品ID与名称的数据为字典列表

如何合并重复产品条目并转换为字典列表

问题回顾

你有一个包含产品ID、名称和数据列表的元组列表,想要将相同产品ID和名称的条目合并,把对应的数据列表拼接成一个列表,最终转换成指定格式的字典列表。

原始数据

x = [
    (14, 'netflix', [1, 2, 3, 4, 5, 6]), 
    (14, 'netflix', [7, 8, 9, 10]),
    (15,'tv', [1, 2, 3, 4, 5]), 
    (15, 'tv', [7, 8, 9]),
    (16, 'radio', [1, 2, 3, 4]), 
    (16, 'radio', [1, 2, 3, 4])
]

期望输出

[
    {'product_id':14, 'product':'netflix', 'values':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},
    {'product_id':15, 'product': 'tv', 'values':[1, 2, 3, 4, 5, 7, 8, 9]},
    {'product_id':16, 'product': 'radio', 'values':[1, 2, 3, 4, 1, 2, 3, 4]}
]

(注:你给出的期望输出里tv的values多了个6,应该是笔误,实际合并后是上述结果)

解决方案

不需要用嵌套循环(那样会重复遍历,效率低),我们可以用临时字典分组的方式来实现,逻辑清晰且高效:

代码实现

# 初始化临时字典,用于按产品ID+名称分组
grouped = {}

# 遍历原始列表,分组合并数据
for product_id, product_name, data_list in x:
    # 用(product_id, product_name)作为唯一键,确保同一产品的条目被分组
    key = (product_id, product_name)
    if key not in grouped:
        # 首次遇到该产品时,初始化空列表
        grouped[key] = []
    # 将当前数据列表的元素追加到分组列表中(用extend而非append,避免嵌套列表)
    grouped[key].extend(data_list)

# 转换为目标格式的字典列表
result = [
    {'product_id': pid, 'product': name, 'values': data}
    for (pid, name), data in grouped.items()
]

# 验证结果
print(result)

逻辑解释

  1. 分组逻辑:用(product_id, product_name)作为字典的键,因为这个组合是每个产品的唯一标识,不会重复,确保同一产品的所有数据都被分到同一组。
  2. 合并数据:使用extend()方法把每个数据列表的元素逐个添加到分组列表中,而不是append()(后者会把整个列表作为一个元素加入,导致嵌套)。
  3. 转换格式:最后用列表推导式把分组后的字典转换成你需要的字典列表格式,一步到位。

补充说明

如果你担心重复数据(比如radio的两个相同数据列表),可以根据需求改成去重逻辑,比如把grouped[key].extend(data_list)改成grouped[key].extend(item for item in data_list if item not in grouped[key]),但根据你的期望输出,是保留重复数据的,所以当前代码完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:20:28