如何按键的数值升序排序含字母数字键的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
相关产品推荐
相关产品推荐

