Python3无循环实现计数字典转换为带重复元素列表的方法
Python字典转重复元素列表实现方案
前置说明
此处的「不使用循环」指代码层面不编写显式的for/while循环,底层执行的隐式迭代不在限制范围内。Python3.7及以上版本字典默认保留插入顺序,可直接得到匹配顺序的结果,低版本Python可先对字典键排序再执行后续操作。
方案1:内置函数实现(无额外依赖)
- 核心逻辑:
- 对每个键值对
k:v,通过[k] * v生成包含v个k的子列表 - 借助
sum函数的拼接能力,以空列表为初始值把所有子列表拼接为最终结果
- 对每个键值对
- 代码实现:
d = {10:1, 20:2, 30:3} res = sum(map(lambda x: [x[0]] * x[1], d.items()), [])
方案2:itertools工具实现(性能更优)
- 核心逻辑:
- 用
itertools.repeat生成对应数量的重复元素迭代器,避免生成临时子列表占用额外内存 - 用
itertools.chain.from_iterable拼接所有迭代器元素,转换为列表后得到结果
- 用
- 代码实现:
import itertools d = {10:1, 20:2, 30:3} res = list(itertools.chain.from_iterable(map(lambda x: itertools.repeat(x[0], x[1]), d.items())))
内容的提问来源于stack exchange,提问作者Zhili Qiao
相关产品推荐
相关产品推荐

