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

如何修改Python代码实现字典与嵌套列表的排序?

如何修改代码实现字典与列表的嵌套排序?

需求&示例

我需要修改现有代码,让它既能递归排序字典的键,也能对嵌套的列表进行排序。比如:

输入:

{'a': 1, 'c': 3, 'b': {'b2': 2, 'b1': [1, 7, 4, 2]}}

期望输出:

{'a': 1, 'b': {'b1': [1, 2, 4, 7], 'b2': 2}, 'c': 3}

原始代码(仅支持字典排序)

这是我用到的基础代码,只能处理字典的递归排序,没法处理列表:

def sort_dict(item: dict):
    return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}

感谢@gyli提供的基础代码

我的两次失败尝试

尝试1

能看到列表被排序,但最终返回的结果里列表还是原样:

def sort_dict(item: dict):
    for k, v in sorted(item.items()):
        v = sorted(v) if isinstance(v, list) else v
    return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}

尝试2

同样失败,问题出在列表排序后没正确返回:

def sort_dict(item: dict):
    return {k: sort_dict(v) if isinstance(v, dict) else sort_list(v) for k, v in sorted(item.items())}

def sort_list(item):
    item = sorted(item) if isinstance(item, list) else item

解决方法

要同时处理字典和列表的嵌套排序,需要在递归逻辑里同时判断两种类型,并且注意列表里可能还嵌套其他字典或列表,所以要先递归处理列表元素再排序。

最终可用代码

def sort_nested(item):
    if isinstance(item, dict):
        # 先按字典键排序,再递归处理每个值
        return {k: sort_nested(v) for k, v in sorted(item.items())}
    elif isinstance(item, list):
        # 先递归处理列表中的每个元素,再对整个列表排序
        processed_items = [sort_nested(i) for i in item]
        return sorted(processed_items)
    else:
        # 非字典非列表的类型直接返回原值
        return item

测试结果

用示例输入测试:

test_input = {'a': 1, 'c': 3, 'b': {'b2': 2, 'b1': [1, 7, 4, 2]}}
print(sort_nested(test_input))

输出完全符合预期:

{'a': 1, 'b': {'b1': [1, 2, 4, 7], 'b2': 2}, 'c': 3}

之前尝试失败的原因

  1. 第一次尝试里,循环中修改的v只是临时变量,没有被用到后面的字典推导式中,所以排序后的列表根本没被返回。
  2. 第二次尝试的sort_list函数没有写return语句,默认返回None,导致原本的列表被替换成了None,自然得不到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:31:01