在字典中将元组作为值追加到现有键
我有一个列表,里面包含了多个小列表,每个小列表里有三个项目(为了举例说明):产品类型、产品颜色和产品数量。
我想做的是创建一个字典,让每种产品类型作为一个键,而颜色和数量作为值。也就是说,我想要的结构是这样的:
key1:(tuple1),(tuple2),...
或者
key1:[(tuple1),(tuple2),...]
问题是,正如你所知道的,不能直接把元组作为值添加到字典的键里。
这里有一个简单的例子可以试试:
my_list = [["ball","red",2],["ball","blue",5],["ball","green",7],["shirt","large",5],["shirt","medium",9],["shirt","small",11]]
inventory_dict = {}
for item in my_list:
if item[0] not in inventory_dict:
inventory_dict[item[0]] = (item[1],item[2])
else:
inventory_dict[item[0]].append((item[1],item[2]))
当我尝试做类似这样的事情时:
my_list = [["ball","red",2],["ball","blue",5],["ball","green",7],["shirt","large",5],["shirt","medium",9],["shirt","small",11]]
inventory_dict = {}
for item in my_list:
my_tuple = (item[1],) + tuple(item[2])
if item[0] not in inventory_dict:
inventory_dict[item[0]] = my_tuple
else:
inventory_dict[item[0]].append(my_tuple)
受到 这个回答 的启发,我遇到了一个“TypeError: 'int' object is not iterable”的错误。
然后当我尝试用:
my_tuple = list((item[1],item[2]))
受到 这个回答 的启发,我得到了一个我无法处理的结果,格式是:
{'ball': ['red', 2, ['blue', 5], ['green', 7]],
'shirt': ['large', 5, ['medium', 9], ['small', 11]]}
我无法处理这个结果的原因是,比如说每个值的长度是4,而应该是3。第一个类型和它的数量被分开成了值列表的不同元素。
我还应该提到,在我代码的下一步,我打算对数量进行一些操作。
希望我能清楚地解释我的问题,也希望你能帮忙!谢谢 :)
1 个回答
5
把你第一个例子中的那一行改成:
inventory_dict[item[0]] = [(item[1],item[2])]
如果你想以后能添加东西,第一次创建的时候就得把值设成一个列表。
你也可以使用 collections.defaultdict
,这样你就可以直接写:
inventory_dict = collections.defaultdict(list)
然后你就可以省去那个如果-那么的判断,直接像这样写循环:
for item in my_list:
inventory_dict[item[0]].append((item[1], item[2]))