Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将元组作为值附加到字典中的现有键_Python_List_Python 2.7_Dictionary_Tuples - Fatal编程技术网

Python 将元组作为值附加到字典中的现有键

Python 将元组作为值附加到字典中的现有键,python,list,python-2.7,dictionary,tuples,Python,List,Python 2.7,Dictionary,Tuples,我有一个列表,每个列表中有3个项目(为了示例):产品类型、产品颜色、产品数量 我想做的是创建一个字典,每个产品类型都是一个键,颜色和数量都是值。也就是说,我要找的是这种结构: 键1:(tuple1),(tuple2) 或 键1:[(tuple1),(tuple2),…] 问题是,正如你所知,你不能在dicts中将元组作为值附加到键上 下面是一个简单的示例: my_list = [["ball","red",2],["ball","blue",5],["ball","green",7],["shi

我有一个列表,每个列表中有3个项目(为了示例):产品类型、产品颜色、产品数量

我想做的是创建一个字典,每个产品类型都是一个键,颜色和数量都是值。也就是说,我要找的是这种结构:

键1:(tuple1),(tuple2)

键1:[(tuple1),(tuple2),…]

问题是,正如你所知,你不能在dicts中将元组作为值附加到键上

下面是一个简单的示例:

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]]}
我不能使用它的原因是,例如,每个值的len是4,而它应该是3。第一种类型及其数量是值列表中的独立元素

我应该提到,在我的代码的下一步中,我计划用数量做一些哮喘治疗

希望我能很好地解释我的问题,希望你能帮助我!
谢谢:)

将第一个示例中的行更改为:

inventory_dict[item[0]] = [(item[1],item[2])]
如果希望以后能够追加内容,则需要在第一次创建时将该值列为一个列表

您还可以使用,这样您就可以:

inventory_dict = collections.defaultdict(list)
然后你可以省去if-then,只做如下循环:

for item in my_list:
    inventory_dict[item[0]].append((item[1], item[2]))

啊,啊!!!我是如此接近!!:)你能想象我花了多少时间试图找出答案,甚至写下这个问题,而答案就在那里!愚蠢的stupid@Optimesh:嘿,别对自己太苛刻了。看到这么多嵌套的括号和括号,任何人的眼睛都会变得呆滞:-)谢谢,伙计你知道为什么简单的导入“从集合导入defaultdict”不起作用(“集合未定义”)但导入集合起作用吗?@Optimesh:如果你使用
从集合导入defaultdict
,那么你需要像引用
defaultdict
一样引用
defaultdict
。如果使用
import collections
,则需要将其称为
collections.defaultdict
。你可以在StackOverflow上找到关于这个的其他问题。是的,肯定是该睡觉的时候了。:)(凌晨1:15)再次感谢!!