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

如何将Python列表中相同长度的数字按长度分组存入字典?

问题描述

给定Python列表:

list_1 = [1, 2, 3, 11, 22, 33, 111, 222, 3333, 2222, 1111, 333]

需要生成一个字典,其中键为列表元素的数字长度,值为包含对应长度元素的列表。示例输出如下:

Dict_1 = {1: [1, 2, 3], 2: [11, 22, 33], 3: [111, 222, 333], 4: [3333, 2222, 1111]}

解决方案

方法一:基础循环实现

通过遍历列表元素,计算每个元素的长度后分类存入字典:

list_1 = [1, 2, 3, 11, 22, 33, 111, 222, 3333, 2222, 1111, 333]
Dict_1 = {}

for num in list_1:
    length = len(str(num))  # 转字符串直接获取数字长度,简单直观
    if length not in Dict_1:
        Dict_1[length] = []
    Dict_1[length].append(num)

print(Dict_1)

执行后输出:

{1: [1, 2, 3], 2: [11, 22, 33], 3: [111, 222, 333], 4: [3333, 2222, 1111]}

方法二:用collections.defaultdict简化代码

defaultdict可以自动为不存在的键创建空列表,省去判断键是否存在的步骤:

from collections import defaultdict

list_1 = [1, 2, 3, 11, 22, 33, 111, 222, 3333, 2222, 1111, 333]
Dict_1 = defaultdict(list)

for num in list_1:
    length = len(str(num))
    Dict_1[length].append(num)

# 可选:将defaultdict转为普通字典
Dict_1 = dict(Dict_1)

print(Dict_1)

方法三:字典推导式+itertools.groupby

注意使用groupby前需要先按元素长度排序,因为groupby只会对连续的相同键分组:

from itertools import groupby

list_1 = [1, 2, 3, 11, 22, 33, 111, 222, 3333, 2222, 1111, 333]
# 先按元素长度排序
sorted_list = sorted(list_1, key=lambda x: len(str(x)))
# 分组生成字典
Dict_1 = {length: list(group) for length, group in groupby(sorted_list, key=lambda x: len(str(x)))}

print(Dict_1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:30:52