Python字典打印仅保留高值输入及商品信息匹配错误求助
Python购物车函数问题排查:记录丢失与商品信息匹配错误
问题描述
我正在开发三个Python购物车相关函数:
- 显示所有录入记录
- 合并相同商品数量并按升序展示
- 计算总成本
目前遇到两个核心问题:
- 显示所有记录功能异常:同一商品code的记录仅保留数量最高的那条,其余丢失。例如依次录入:
- code2(数量4)
- code7(数量6)
- code2(数量6)
- code23(数量6)
预期显示4条完整记录,但实际只显示3条,code2仅保留数量6的记录。
- record_cart函数商品信息匹配错误:预设的code与商品对应关系失效:
- code4 应对应
Knife Block Set - code5 应对应
Coffee Capsule Holder - code2 应对应
Tea Set
实际匹配结果完全错误。
- code4 应对应
附上相关代码片段:
# 预设商品映射字典 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:商品信息匹配错误的排查与修复
常见排查点
- key格式一致性:检查
products字典的key和传入的code是否完全匹配(比如是否存在大小写差异,如传入Code2但字典key是code2)。 - code拼写错误:确认调用
record_cart时传入的code没有拼写错误(比如把code4写成code04)。 - 字典被意外修改:排查代码中是否有其他地方修改了
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
相关产品推荐
相关产品推荐

