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

如何使用字典推导式实现按数字位数分组列表元素的需求?

可以用字典推导式实现这个分组需求!

当然没问题,不过得先理清:标准的字典推导式是一对一映射,而你的需求是把多个元素按位数分组(一对多),所以直接用简单的推导式没法完成累积,但我们可以结合集合推导式来获取所有唯一的位数键,再为每个键收集对应元素,这样就能用字典推导式实现了。

字典推导式实现代码

先看最终的实现:

a_list = [22, 55, 77, 234, 765, 1234]
a_dict = {
    key: [num for num in a_list if len(str(num)) == key]
    for key in {len(str(num)) for num in a_list}
}
print(a_dict)  # 输出: {2: [22, 55, 77], 3: [234, 765], 4: [1234]}

代码解释

  1. 外层的{len(str(num)) for num in a_list}是集合推导式,用来获取a_list中所有元素的唯一数字位数(这里得到{2,3,4}),作为字典的键。
  2. 对于每个键key,内层的列表推导式[num for num in a_list if len(str(num)) == key]会收集所有位数等于key的元素,作为对应键的值。

对比你的现有代码

你的代码是典型的循环累加方式,逻辑是对的,但可以简化:

a_dict = {}
for i in a_list:
    key = len(str(i))
    # 用setdefault方法简化临时列表的操作
    a_dict.setdefault(key, []).append(i)

这种方式的时间复杂度是O(n)(只遍历一次列表),而上面的字典推导式是O(n*k)(k是不同位数的数量),对于小列表来说两者差异不大,但数据量大时循环累加更高效。

额外推荐:更高效的分组方式

如果追求最高效的分组,推荐用collections.defaultdict,代码更简洁:

from collections import defaultdict

a_dict = defaultdict(list)
for num in a_list:
    key = len(str(num))
    a_dict[key].append(num)
# 若需要转换成普通字典,执行 dict(a_dict) 即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:12:28