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

Python字典打印仅保留高值输入及商品信息匹配错误求助

Python购物车函数问题排查:记录丢失与商品信息匹配错误

问题描述

我正在开发三个Python购物车相关函数:

  • 显示所有录入记录
  • 合并相同商品数量并按升序展示
  • 计算总成本

目前遇到两个核心问题:

  1. 显示所有记录功能异常:同一商品code的记录仅保留数量最高的那条,其余丢失。例如依次录入:
    • code2(数量4)
    • code7(数量6)
    • code2(数量6)
    • code23(数量6)
      预期显示4条完整记录,但实际只显示3条,code2仅保留数量6的记录。
  2. record_cart函数商品信息匹配错误:预设的code与商品对应关系失效:
    • code4 应对应 Knife Block Set
    • code5 应对应 Coffee Capsule Holder
    • code2 应对应 Tea Set
      实际匹配结果完全错误。

附上相关代码片段:

# 预设商品映射字典
products = {
    "code2": "Tea Set",
    "code4": "Knife Block Set",
    "code5": "Coffee Capsule Holder",
    "code7": "Blender",
    "code23": "Toaster"
}

# 存储记录的容器(有问题的实现)
cart_records = {}

# 显示所有记录的函数
def show_all_records():
    for code, info in cart_records.items():
        print(f"Code: {code}, Product: {info['name']}, Quantity: {info['quantity']}")

# 记录购物车的函数(有问题的实现)
def record_cart(code, quantity):
    if code in cart_records:
        if quantity > cart_records[code]['quantity']:
            cart_records[code]['quantity'] = quantity
    else:
        cart_records[code] = {
            "name": products.get(code, "Unknown Product"),
            "quantity": quantity
        }

# 测试用例
record_cart("code2", 4)
record_cart("code7", 6)
record_cart("code2", 6)
record_cart("code23", 6)
show_all_records()

问题1:记录丢失的原因与修复

原因

当前用字典cart_records存储记录,字典的key是商品code,同一code的后续录入会直接覆盖原有条目,且仅当新数量更大时才更新数量,导致同code的多条记录被合并为一条,而非保留所有录入痕迹。

修复方案

将cart_records改为列表存储,每条录入作为独立元素追加,确保所有记录都被保留:

# 修改为列表存储所有独立记录
cart_records = []

def record_cart(code, quantity):
    # 直接追加新记录,不做覆盖
    cart_records.append({
        "code": code,
        "name": products.get(code, "Unknown Product"),
        "quantity": quantity
    })

def show_all_records():
    for idx, record in enumerate(cart_records, 1):
        print(f"记录{idx}: Code: {record['code']}, 商品: {record['name']}, 数量: {record['quantity']}")

测试后会输出4条完整记录,符合预期。


问题2:商品信息匹配错误的排查与修复

常见排查点

  1. key格式一致性:检查products字典的key和传入的code是否完全匹配(比如是否存在大小写差异,如传入Code2但字典key是code2)。
  2. code拼写错误:确认调用record_cart时传入的code没有拼写错误(比如把code4写成code04)。
  3. 字典被意外修改:排查代码中是否有其他地方修改了products字典的内容(如删除、覆盖key值)。

修复后验证

如果products字典本身正确,修改record_cart的存储方式后,商品匹配逻辑会正常工作。若仍出现Unknown Product,直接打印传入的code值,确认是否在字典key列表中:

# 调试用代码
def record_cart(code, quantity):
    print(f"当前传入的code: {code}")  # 调试用
    cart_records.append({
        "code": code,
        "name": products.get(code, "Unknown Product"),
        "quantity": quantity
    })

额外功能示例:合并数量并升序展示

基于列表存储的记录,可以实现合并相同商品数量并按code升序展示的功能:

def merge_and_sort_records():
    merged = {}
    # 合并同code商品数量
    for record in cart_records:
        code = record['code']
        if code in merged:
            merged[code]['quantity'] += record['quantity']
        else:
            merged[code] = {
                "name": record['name'],
                "quantity": record['quantity']
            }
    # 按商品code升序排序
    sorted_records = sorted(merged.items(), key=lambda x: x[0])
    # 输出结果
    print("\n合并并排序后的记录:")
    for code, info in sorted_records:
        print(f"Code: {code}, 商品: {info['name']}, 总数量: {info['quantity']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:55:18