如何将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
相关产品推荐
相关产品推荐

