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

Python中如何编辑无固定键、值为tuple类型的字典内容?

问题原因

  1. 你将字典直接转列表的操作是错误的:list(shopping_basket)只会得到字典所有键组成的列表,不会包含商品的属性值,自然无法通过shopping[item][0]访问到数量字段
  2. 你存入购物篮的商品值是元组(tuple)类型,元组是不可变对象,就算正确获取到也不能直接修改对应下标的值
  3. 逻辑上的嵌套for循环完全冗余,还重复覆盖了item变量,导致逻辑混乱

解决方案

方案1:修改商品存入逻辑,直接使用可变的列表存储(推荐,后续修改更方便)

存入商品时将原来默认生成元组的写法,改为用方括号包裹生成列表:

choose=int(input('1.商品:Milk,价格:$2.47,消费税:$0.16,参与优惠:是\n'
                 '2.商品:Butter,价格:$4.50,消费税:$0.32,参与优惠:否\n'
                 '3.商品:Egg,价格:$3.40,消费税:$0.24,参与优惠:否\n'
                 '请输入选择的商品编号: '))
qnty=int(input('请输入购买数量: '))
# 用[]包裹,存入列表而非元组
shopping_basket[Dairy_goods[choose]['item']] = [
    shopping_basket.get(Dairy_goods[choose]['item'], 0) + qnty,
    Dairy_goods[choose]['p'],
    Dairy_goods[choose]['g'],
    Dairy_goods[choose]['offer']
]

后续修改购物篮的逻辑可以直接写为:

edit_item = input('输入要修改的商品名称:')
if edit_item in shopping_basket:
    new_qty = int(input(f'请输入{edit_item}的新购买数量:'))
    shopping_basket[edit_item][0] = new_qty
    print(f'修改成功,当前购物篮:{shopping_basket}')
else:
    print('该商品未在购物篮中')

方案2:不修改原有存入逻辑,直接更新元组

如果不想改动之前的代码,也可以在修改时重新生成新的元组赋值回购物篮:

edit_item = input('输入要修改的商品名称:')
if edit_item in shopping_basket:
    # 取出原有元组
    old_data = shopping_basket[edit_item]
    new_qty = int(input(f'请输入{edit_item}的新购买数量:'))
    # 拼接新的元组重新赋值
    shopping_basket[edit_item] = (new_qty, old_data[1], old_data[2], old_data[3])
    print(f'修改成功,当前购物篮:{shopping_basket}')
else:
    print('该商品未在购物篮中')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:00:00