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

如何用Python推导式合并列表中同id的字典account_id值?

按id合并account_id列表的推导式实现方案

示例输入

a = [
    {'id': 977950, 'account_id': u'BKDFIU'},
    {'id': 45637, 'account_id': u'FGDG'},
    {'id': 764325, 'account_id': u'HGDER$Y'},
    {'id': 1011243, 'account_id': u'REW$LP'},
    {'id': 1022741, 'account_id': u'YUFDNGFN'},
    {'id': 45637, 'account_id': None},
    {'id': 764325, 'account_id': u'HGDERYTH'}
]

目标输出

{
    977950: [u'BKDFIU'],
    45637: [u'FGDG', None],
    764325: [u'HGDER$Y', u'HGDERYTH'],
    1011243: [u'REW$LP'],
    1022741: [u'YUFDNGFN']
}

实现方案

方案1:高效简洁的非纯推导式写法(推荐大量数据使用)

借助collections.defaultdict快速完成分组,时间复杂度O(n),无需排序:

from collections import defaultdict

result = defaultdict(list)
for item in a:
    result[item['id']].append(item['account_id'])
# 可选:转换为普通字典
result = dict(result)

方案2:纯字典推导式写法

如果一定要用推导式实现,可以结合itertools.groupby,但必须先按id排序(groupby仅对连续相同键分组),时间复杂度O(n log n):

from itertools import groupby
from operator import itemgetter

# 先按id排序
sorted_items = sorted(a, key=itemgetter('id'))
# 字典推导式完成分组
result = {
    group_id: [item['account_id'] for item in group]
    for group_id, group in groupby(sorted_items, key=itemgetter('id'))
}

方案对比

  • 方案1:无需排序,性能更优,写法直观,适合处理大规模数据。
  • 方案2:严格使用推导式实现,但依赖排序,数据量极大时性能略逊于方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:20:37