Python中按数值对嵌套字典的逗号分隔字符串值排序
按嵌套字典中的miles数值排序问题解决
你给出的嵌套字典:
some_dictionary = { "sub_dict1": { "miles": "5,024,279" }, "sub_dict2": { "miles": "733,391" }, "sub_dict3": { "miles": "7,151,502" } }
需要排序后得到:
"sub_dict2": {"miles": "733,391"}, "sub_dict1": {"miles": "5,024,279"}, "sub_dict3": {"miles": "7,151,502"}
你的代码触发TypeError,问题出在排序的key函数上:
top = OrderedDict(sorted(some_dictionary.items(), key=lambda x: (x[1], "miles".replace(',', '')))
这里有两个核心错误:
- 你没正确提取子字典里的
miles值,x[1]是整个子字典,直接用来排序会报错,因为字典无法直接比较大小; ""miles".replace(',', '')"完全无效,你操作的是固定字符串"miles",而非子字典中存储的miles数值字符串。
另外代码还缺失一个右括号,会导致语法错误。
修正后的代码
from collections import OrderedDict some_dictionary = { "sub_dict1": { "miles": "5,024,279" }, "sub_dict2": { "miles": "733,391" }, "sub_dict3": { "miles": "7,151,502" } } # 按miles的数值从小到大排序 top = OrderedDict(sorted(some_dictionary.items(), key=lambda x: int(x[1]["miles"].replace(',', '')))) # 按目标格式输出 for key, value in top.items(): print(f'"{key}": {value},')
运行后输出:
"sub_dict2": {"miles": "733,391"}, "sub_dict1": {"miles": "5,024,279"}, "sub_dict3": {"miles": "7,151,502"},
简化版本(Python3.7+)
如果你的Python版本是3.7及以上,普通字典已经会保留插入顺序,无需使用OrderedDict:
top = dict(sorted(some_dictionary.items(), key=lambda x: int(x[1]["miles"].replace(',', ''))))
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

