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

Python中如何优雅排序含不同类型值的字典键与值?

字典按键和值递归排序的优雅实现

需要对字典按键和值进行排序,但字典的值可能是不同类型(比如列表、嵌套字典),示例输入如下:

some_dict = {
    'list_from_one_element': ['one'], 
    'list_from_many_elements': ['one', 'three', 'two'],
    'dict_with_dicts': {
        'first': '1',
        'third': '3',
        'second': '2',
    },
}

期望输出:

dict_items([('dict_with_dicts', {'first': '1', 'second': '2', 'third': '3'}), ('list_from_many_elements', ['one', 'two', 'three']), ('list_from_one_element', ['one'])])

你尝试的实现代码:

sorted_dict = dict()
for key in sorted(some_dict):
    for value in some_dict.values():
        sorted_dict.update({key: sorted(value)})
for key in sorted_dict.get('dict_with_dicts'):
    sorted_dict.get('dict_with_dicts').update({key: dict_with_dicts.get(key)})

更优雅的实现方案

可以用递归函数处理不同类型的值,结合Python内置的sorted和生成器表达式简化逻辑,代码如下:

def sort_value(value):
    if isinstance(value, dict):
        # 对嵌套字典按键排序,递归处理每个子值
        return dict(sorted((k, sort_value(v)) for k, v in value.items()))
    elif isinstance(value, list):
        # 对列表元素排序
        return sorted(value)
    else:
        # 非字典/列表类型直接返回原数据
        return value

# 对原字典按键排序,同时用sort_value处理对应的值
sorted_result = dict(sorted((k, sort_value(v)) for k, v in some_dict.items()))

# 输出验证
print(sorted_result.items())

方案优势

  • 扩展性强:递归逻辑支持任意层级的嵌套字典和列表,不用针对特定键写硬编码处理
  • 代码简洁:利用内置函数和生成器表达式替代多层循环,符合Pythonic风格
  • 逻辑清晰:每个类型的处理逻辑明确,避免了原代码中内层遍历所有值的无效操作
  • 通用性高:自动适配不同类型的值,不需要额外修改代码就能处理其他非字典/列表的类型

内容的提问来源于stack exchange,提问作者Павло Ракета

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:40:57