Python中如何基于另一集合元素存在性向集合添加元组并更新数量
商品集合更新逻辑实现说明
你当前编写的代码核心逻辑存在多处偏差,更推荐调整实现思路后完成需求,也可以在现有代码基础上做大幅修改,先明确现有代码的问题:
- 元组为不可变类型,存储在集合中的商品元组无法直接修改数量字段,要更新数据必须先删除旧元组再插入新元组
- 目录校验逻辑错误:遍历目录时每次往列表追加商品名后立刻判断目标名称是否存在,只要第一个遍历到的商品不是目标名称就会直接抛出错误,完全不符合校验要求
- 没有实现数量累加逻辑,新增的元组仅包含名称、数量两个字段,未从目录调取对应价值
- 直接在函数内部修改全局变量
my_set容易产生不可预期的副作用,不推荐该写法,你原来代码里的order参数可以直接用来传入当前持有的商品集合,不需要额外依赖全局变量
实现步骤
- 先将商品目录预处理为字典结构,方便按商品名称快速查询对应价值,避免每次操作都遍历目录
# 预处理目录为 名称:价值 的字典 CATALOGUE_DICT = {item[0]: item[2] for item in CATALOGUE}
- 将当前持有的商品集合转为临时字典操作,解决元组不可变、集合查找效率低的问题
- 先校验目标商品是否在目录中,不存在直接抛出错误
- 商品存在则累加数量,不存在则新增条目,价值直接从预处理的目录字典中获取
- 最后将临时字典转回要求的集合格式
示例代码
def add_item(name, add_quantity, current_set): # 校验商品是否在目录中 if name not in CATALOGUE_DICT: raise ValueError('item not in catalogue') # 把当前集合转成字典方便修改 current_dict = {item[0]: (item[1], item[2]) for item in current_set} # 处理数量更新 if name in current_dict: old_quantity, value = current_dict[name] current_dict[name] = (old_quantity + add_quantity, value) else: current_dict[name] = (add_quantity, CATALOGUE_DICT[name]) # 转回集合格式返回 return {(k, v[0], v[1]) for k, v in current_dict.items()} # 调用示例 my_set = {("a", 1, 20), ("b", 4, 50)} new_set = add_item("a", 1, my_set)
运行后得到的new_set就符合你要求的{("a", 2, 20), ("b", 4, 50)}结果。
内容的提问来源于stack exchange,提问作者mathisfun123
相关产品推荐
相关产品推荐

