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

Python如何用单行Pythonic方式构建值为可变长度列表的字典

可行的Pythonic单行实现方案

你当前用defaultdict的实现已经是性能最优、可读性最高的写法,如果需要更简洁的单行实现,有两种常用方案:

方案1:无需额外导入,基于dict.setdefault实现

n = {}; for i in range(1000): n.setdefault(sum(int(d) for d in str(i)), []).append(i)

如果已经提前定义了sumdigits函数,可以简化为:

def sumdigits(x): return sum(int(i) for i in str(x))
n = {}; for i in range(1000): n.setdefault(sumdigits(i), []).append(i)

方案2:基于itertools.groupby的字典推导式实现

需要注意groupby只能合并连续的同键元素,必须先按各位数字和排序再分组:

from itertools import groupby
n = {k: list(v) for k, v in groupby(sorted(range(1000), key=lambda x: sum(int(i) for i in str(x))), key=lambda x: sum(int(i) for i in str(x)))}

同样如果提前定义了sumdigits函数可以大幅简化:

n = {k: list(v) for k, v in groupby(sorted(range(1000), key=sumdigits), key=sumdigits)}

方案对比

  • 你原有defaultdict的实现时间复杂度为O(n),是性能最优的选择,可读性也最高,实际开发中更推荐使用,不需要刻意追求单行写法
  • setdefault单行写法性能接近原有实现,不需要额外导入依赖
  • groupby方案因为多了一步排序操作,时间复杂度为O(n log n),数据量较大时性能差距会非常明显,仅适合小数据量场景使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 04:45:03