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

如何以Pythonic方式合并相同Main ID的字典Sub IDs列表?是否可使用列表推导式?

合并相同Main ID的Sub IDs列表的Pythonic实现方式

针对你的需求,这里有几种简洁的Python实现方式,同时聊聊能不能用列表推导式来完成:

方法一:字典聚合(最直观高效的Pythonic方式)

这种方法用普通字典来跟踪每个Main ID对应的Sub IDs,逻辑清晰,时间复杂度是O(n),不需要额外排序,适合大多数场景:

original_list = [{'Main ID': 0, 'Sub IDs': [0]}, {'Main ID': 0, 'Sub IDs': [3]}, {'Main ID': 2, 'Sub IDs': [3]}]

aggregated = {}
for item in original_list:
    main_id = item['Main ID']
    # 如果当前Main ID还没被记录,初始化一个新条目
    if main_id not in aggregated:
        aggregated[main_id] = {'Main ID': main_id, 'Sub IDs': []}
    # 扩展Sub IDs列表
    aggregated[main_id]['Sub IDs'].extend(item['Sub IDs'])

# 将字典的值转换为最终列表
result = list(aggregated.values())
print(result)
# 输出: [{'Main ID': 0, 'Sub IDs': [0, 3]}, {'Main ID': 2, 'Sub IDs': [3]}]

方法二:结合itertools.groupby和列表推导式

如果你想使用列表推导式,可以借助itertools.groupby,但要注意**groupby要求列表先按分组键排序**,否则会把不连续的相同Main ID当成独立分组:

from itertools import groupby
from operator import itemgetter

original_list = [{'Main ID': 0, 'Sub IDs': [0]}, {'Main ID': 0, 'Sub IDs': [3]}, {'Main ID': 2, 'Sub IDs': [3]}]

# 先按Main ID排序,确保相同ID的项连续
sorted_list = sorted(original_list, key=itemgetter('Main ID'))

# 用列表推导式完成分组和合并
result = [
    {'Main ID': main_id, 'Sub IDs': [sub_id for item in group for sub_id in item['Sub IDs']]}
    for main_id, group in groupby(sorted_list, key=itemgetter('Main ID'))
]

print(result)
# 输出符合需求的结果

关于纯列表推导式的可行性

纯列表推导式(不借助字典、groupby这类工具)几乎无法完成这个需求,因为列表推导式是无状态的——它没办法跟踪已经处理过哪些Main ID,也就没法合并重复项。所以必须结合状态存储工具(比如字典)或者分组工具(比如groupby)才能实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:17:38