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
相关产品推荐
相关产品推荐

