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

如何将含字母前缀数字键的字典按序导出为JSON

带字母前缀字符串键的字典按序导出JSON实现方案

问题场景

现有字典结构如下:

{
    'abc1': {'1': 'asdf', '11': 'asdfasd', "2": 'afds'},
    'abc2': {'1': 'asdf', '11': 'asdfasd', '2': 'afds'}
}

需要将该字典导出为按键顺序排列的JSON,但因为键是带字母前缀的字符串(如abc1、abc2),内层键也是纯数字字符串(如'1'、'11'),直接用将键转为整数排序的方法行不通(如下示例的思路不适用):

import json

d = dict({'2':'two', '11':'eleven'})
json.dumps({int(x):d[x] for x in d.keys()}, sort_keys=True)

核心实现思路

自定义排序规则,提取键中用于排序的有效部分,分层次处理嵌套字典的键:

1. 处理内层纯数字字符串键

这类键直接按字符串排序会出现'1' < '11' < '2'的错误顺序,解决方法是:

  • 提取内层字典的键值对,将键转为整数后排序,再重新构建有序字典。

2. 处理外层带字母前缀的字符串键

需要分离键的字母前缀和数字后缀:

  • 提取键中的字母部分(如abc)和数字部分(如1),将数字部分转为整数;
  • 排序时先按字母前缀分组(如果前缀有差异),再按数字部分的数值大小排序;
  • 如果所有外层键前缀一致,可直接提取数字部分转整数排序。

完整代码示例

import json
from collections import OrderedDict

def sort_nested_dict(d):
    sorted_items = []
    for key, value in d.items():
        # 递归处理内层嵌套字典
        if isinstance(value, dict):
            # 内层键按数字值排序
            sorted_inner = sorted(value.items(), key=lambda x: int(x[0]))
            sorted_value = OrderedDict(sorted_inner)
        else:
            sorted_value = value
        
        # 处理外层带前缀的键:分离字母和数字
        prefix = ''.join([c for c in key if c.isalpha()])
        num_str = ''.join([c for c in key if c.isdigit()])
        # 生成排序用的键:(前缀, 数字值),确保先按前缀、再按数字排序
        sort_key = (prefix, int(num_str)) if num_str else (key,)
        
        sorted_items.append((sort_key, key, sorted_value))
    
    # 按自定义规则排序后构建有序字典
    sorted_items.sort(key=lambda x: x[0])
    return OrderedDict([(item[1], item[2]) for item in sorted_items])

# 原始字典
original_dict = {
    'abc1': {'1': 'asdf', '11': 'asdfasd', "2": 'afds'},
    'abc2': {'1': 'asdf', '11': 'asdfasd', '2': 'afds'}
}

# 生成有序字典并导出格式化JSON
sorted_dict = sort_nested_dict(original_dict)
print(json.dumps(sorted_dict, indent=4))

代码说明

  • 用OrderedDict保证键的顺序(Python 3.7+普通字典也会保留插入顺序,OrderedDict兼容性更好);
  • 递归处理所有嵌套字典,确保内层数字字符串键也按数值排序;
  • 外层键通过拆分前缀和数字,实现符合直觉的排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:25:03