Python中如何编辑无固定键、值为tuple类型的字典内容?
问题原因
- 你将字典直接转列表的操作是错误的:
list(shopping_basket)只会得到字典所有键组成的列表,不会包含商品的属性值,自然无法通过shopping[item][0]访问到数量字段 - 你存入购物篮的商品值是元组(tuple)类型,元组是不可变对象,就算正确获取到也不能直接修改对应下标的值
- 逻辑上的嵌套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
相关产品推荐
相关产品推荐

