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

Python字典无sort属性报错:嵌套字典数组按createdAt排序问题

问题排查与解决

错误原因

你遇到的AttributeError: 'dict' object has no attribute 'sort',核心问题是:传入total_count_check函数的project_version_items不是字典列表,而是一个包含列表的字典。

从你的数据示例能看到,JSON结构是带"items"键的字典,但你的函数直接对这个字典调用了sort()方法——字典本身没有该方法,因此触发报错。

解决方案

两种修正方式任选其一即可:

方式1:在测试用例中传入正确列表

修改测试用例的函数调用,传入字典中的items列表:

def test__total_count_check():
    input_project_items = load_json_fixture(
        "fixtures/blackduck/api.project.createdAt.json"
    )
    input_delete_list = []
    expected_delete_list_ouput = []
    # WHEN - 传入items列表而非整个字典
    populate_blackduck_delete_list = total_count_check(
        input_project_items["items"], input_delete_list
    )
    # THEN
    assert populate_blackduck_delete_list == expected_delete_list_ouput

方式2:在函数内部兼容字典格式

如果需要函数同时支持传入字典或列表,可在函数内先做判断提取:

import operator

def total_count_check(project_version_items, delete_list):
    # 提取目标列表:若为带items键的字典则取items,否则直接用传入值
    items = project_version_items.get("items", project_version_items) if isinstance(project_version_items, dict) else project_version_items
    # 对列表按createdAt排序
    items.sort(key=operator.itemgetter("createdAt"))
    for item in items:
        if item not in delete_list:
            delete_list.append(item)
            if len(delete_list) >= 6:
                break
    return delete_list

额外优化提示

sort()是原地排序(会修改原列表),如果不想改动传入的原始列表,可改用sorted()生成新列表:

# 替换items.sort(...)
sorted_items = sorted(items, key=operator.itemgetter("createdAt"))
for item in sorted_items:
    # 后续逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:40:41