【发布时间】:2021-07-30 16:12:51
【问题描述】:
我有一个允许的项目目录,比如{("a", 1, 20), ("b", 4, 50)}
对应于(name, quantity, value)。
如果我有一套:
my_set = {("a", 1, 20), ("b", 4, 50)}
我想在此添加一个新项目("a", 1),同时还从目录中获取其他详细信息(值),但将其附加到已经存在的元组中,并添加数值以便数量更新和新设置变成这样:
new_set = {**("a", 2, 20), **("b", 4, 50)}
我目前的代码如下。
def add_item(name, quantity, order):
items = []
for item in CATALOGUE:
items.append(item[0])
if name in items:
my_set.add((name,quantity))
else:
raise ValueError('item not in catalogue')
return my_set
我有什么方法可以添加到此以获得预期的结果,还是需要一种全新的方法?
【问题讨论】:
-
所以你想要
{("a", 1), ("b", 4, 50), ("a",2,20)}? -
@Sujay 抱歉,不清楚我已经编辑了这个问题。我想要的是 {("a",2,20), ("b", 4, 50)}
-
元组是不可变的,所以你必须用新的元组替换旧的元组。
-
在这种情况下字典会更有意义吗?我不确定你想要完成什么。我认为拥有一本以“名字”为关键字的字典会更有意义。您对该键的值可能是一个元组。示例:
my_dict = {'a': (1,20), 'b': (4,50)} -
您可以考虑使用
dict而不是set:my_dict = {"a": (1, 20), "b": (4, 50)}。然后检查是否name in my_dict,如果是my_dict[name] = (my_dict[name][0] + quantity, my_dict[name][1] + order)或类似的。