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

如何按键的数值升序排序含字母数字键的Python字典?

解决带字母数字键的字典排序问题

嘿,我懂你遇到的这个小麻烦!要把这些带数字后缀的filter按键里的数值升序排列其实很简单,咱们一步步来:

首先,核心思路是提取每个键里的数字部分,把它转成整数作为排序依据——毕竟直接按字符串排序的话,遇到类似filter9和filter10的情况会出问题(字符串排序会让filter10排在filter9前面),转成整数对比才是最靠谱的。

方法一:直接替换前缀提取数字

适合你的键格式固定是filter+数字的场景,代码简洁直接:

output_filters = {"filter22": "red", "filter13": "green", "filter36": "yellow"}

# 对字典的键值对按数字升序排序,再转回字典(Python3.7+默认支持有序字典)
sorted_filters = dict(sorted(output_filters.items(), key=lambda item: int(item[0].replace("filter", ""))))

print(sorted_filters)
# 输出结果完全符合你的期望:{'filter13': 'green', 'filter22': 'red', 'filter36': 'yellow'}

方法二:用正则提取数字(更通用)

如果以后你的键格式有变化(比如变成f13ilter这种特殊格式),用正则提取数字会更稳妥,适配性更强:

import re

output_filters = {"filter22": "red", "filter13": "green", "filter36": "yellow"}

sorted_filters = dict(sorted(output_filters.items(), key=lambda item: int(re.findall(r'\d+', item[0])[0])))

注意:Python版本兼容问题

如果你还在使用Python3.6及更早的版本,普通字典是无序的,这时候需要用OrderedDict来保存排序后的结果:

from collections import OrderedDict

output_filters = {"filter22": "red", "filter13": "green", "filter36": "yellow"}

sorted_filters = OrderedDict(sorted(output_filters.items(), key=lambda item: int(item[0].replace("filter", ""))))

这样处理后,就能完美得到你想要的排序后的字典啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:07