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

如何用Quicksort算法对字典列表按sale_number排序?报错求解

字典列表按sale_number快速排序的错误修复与实现

错误原因

  1. 直接报错点:list_devices(sale_number)把列表当作函数调用(用了圆括号),列表是不可调用对象,触发TypeError。同时这里的逻辑完全错误,你需要访问的是列表中每个字典的sale number键,而非全局变量sale_number。
  2. 排序逻辑缺失:原函数没有实现快速排序的核心——递归,只是简单分了左右就合并,且错误操作全局变量而非字典字段。
  3. 字典键名不一致:第三个字典的排序字段键是number sale,和前两个的sale number不统一,会导致KeyError。

修正后的完整代码

先统一字典键名,再实现正确的递归快速排序:

# 统一字典键名,修复第三个字典的键名错误
device_list = [
    {'device': 'laptop', 'quantity': 4, 'sale number': 20003, 'sale price': 337.0, 'sale total': 1348.0},
    {'device': 'desktop ', 'quantity': 4, 'sale number': 20003, 'sale price': 292.5, 'sale total': 1170.0},
    {'device': 'printer', 'quantity': 2, 'sale number': 20001, 'sale price': 173.75, 'sale total': 347.5}
]

def quicksort_by_sale_number(list_devices):
    # 基线条件:列表长度<=1时直接返回
    if len(list_devices) <= 1:
        return list_devices
    # 取第一个元素的sale number作为基准值
    pivot = list_devices[0]['sale number']
    left, center, right = [], [], []
    # 遍历每个字典,按sale number分组
    for item in list_devices:
        current_num = item['sale number']
        if current_num < pivot:
            left.append(item)
        elif current_num == pivot:
            center.append(item)
        else:
            right.append(item)
    # 递归排序左右子列表,合并结果
    return quicksort_by_sale_number(left) + center + quicksort_by_sale_number(right)

# 测试排序
sorted_devices = quicksort_by_sale_number(device_list)
for dev in sorted_devices:
    print(dev)

核心修复说明

  • 修正列表调用错误:通过item['sale number']正确提取每个字典的排序字段,不再错误调用列表。
  • 添加递归逻辑:快速排序必须递归处理左右子列表,这是原代码缺失的核心。
  • 统一键名:确保所有字典的排序字段键为sale number,避免键不存在的错误。
  • 保留完整字典结构:排序后返回的是完整的字典列表,而非仅数值,符合业务需求。

sale_number生成逻辑的注意事项

你的生成逻辑没问题,但要确保新生成的sale_record键名统一为sale number,避免后续排序出错:

correlative_number = int(input("Enter the sale registration number: "))
quantity = int(input("Enter the number of devices sold: "))
sale_number = 20000 + correlative_number
# 键名严格统一为"sale number"
sale_record = {
    "device": device,
    "amount": quantity,  # 注意原代码的amount应该对应输入的quantity
    "sale number": sale_number,
    "sale price": sale_price,
    "sale total": total_sale
}
# 将新记录加入列表
device_list.append(sale_record)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:55:02