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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36