如何在Python 2.7中用标准库json模块实现字典键的自然排序?
解决Python 2.7中字典转JSON的自然排序问题
在Python 2.7里,普通字典本身是无序的,且json.dumps()的sort_keys=True只能按字符串字典序排序,没法直接实现数字的自然排序。要达成你要的效果,得手动处理键的排序,再用有序字典保存顺序,具体步骤如下:
实现代码
import json from collections import OrderedDict import random # 生成测试数据 data = {} numbers = list(range(1, 12)) random.shuffle(numbers) for value in numbers: data['item_{}'.format(value)] = 'data{}'.format(value) # 1. 按键中的数字做自然排序 # 从键中提取数字部分转成整数,作为排序依据 sorted_keys = sorted(data.keys(), key=lambda k: int(k.split('_')[1])) # 2. 用OrderedDict保存排序后的键值对(Python2.7中只有它能保留插入顺序) ordered_data = OrderedDict() for key in sorted_keys: ordered_data[key] = data[key] # 3. 输出JSON,此时不需要sort_keys=True print(json.dumps(ordered_data, indent=2))
补充说明
- 如果键的格式不是固定的
item_xxx(比如可能是abc123这种),可以用正则表达式提取数字,适配更通用的场景:import re sorted_keys = sorted(data.keys(), key=lambda k: int(re.search(r'\d+', k).group())) - Python2.7的
json.dumps()会尊重OrderedDict的插入顺序,所以只要先把键按自然排序后再构建OrderedDict,就能得到你预期的输出格式。
内容的提问来源于stack exchange,提问作者newdeveloper
相关产品推荐
相关产品推荐

