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

如何用更Pythonic/列表推导式方式从指定字典生成有序键列表?

更Pythonic的实现方案

针对你的需求——基于值(唯一且范围为0到len(my_dict)-1)生成从小到大排序的键列表,这里提供两种更简洁高效的实现方式:

方法1:利用值作为索引直接构建列表

因为值刚好覆盖了从0到字典长度减1的所有整数,我们可以直接用值作为索引来定位键的位置,时间复杂度为O(n),效率远高于原嵌套循环:

my_dict = {"foo": 1, "bar": 0, "more": 2}
my_list = [None] * len(my_dict)
for key, idx in my_dict.items():
    my_list[idx] = key
# 结果:['bar', 'foo', 'more'](按值从小到大排序的键列表)

方法2:列表推导式结合排序

如果偏好列表推导式的写法,可以借助sorted()函数按值排序后提取键,代码简洁可读性强:

my_dict = {"foo": 1, "bar": 0, "more": 2}
my_list = [key for key, idx in sorted(my_dict.items(), key=lambda x: x[1])]
# 结果:['bar', 'foo', 'more']

如果实际需求是按值从大到小排序(对应原代码末尾的reverse()操作),只需给sorted()添加reverse=True参数:

my_list = [key for key, idx in sorted(my_dict.items(), key=lambda x: x[1], reverse=True)]
# 结果:['more', 'foo', 'bar']

对比原实现

原代码通过嵌套循环遍历字典找对应值的键,时间复杂度为O(n²),当字典规模较大时效率会明显下降。上面两种方法要么是线性时间复杂度,要么是O(n log n)的排序时间,同时代码风格更符合Python的简洁特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:05:26