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

时间:2014-05-11 22:03:58

标签: python list python-2.7 dictionary tuples

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

我尝试做的是以每种产品类型为关键字的方式创建字典,颜色和数量是值。也就是说,我正在寻找的是这种结构:

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)
this answer启发,我得到了一个" TypeError:' int'对象不可迭代"错误。

当我尝试将my_tuple替换为:

my_tuple = list((item[1],item[2]))

受到this answer的启发,我得到了一个我无法使用的结果:

{'ball': ['red', 2, ['blue', 5], ['green', 7]],
 'shirt': ['large', 5, ['medium', 9], ['small', 11]]}

我无法使用它的原因是,例如每个值的len是4,它应该是3.第一个类型及其数量是值列表的单独元素。

我应该提一下,在我的代码的下一步中,我计划用数量做一些哮喘患者。

希望我能够很好地解释我的问题并希望你能提供帮助! 谢谢:))

1 个答案:

答案 0 :(得分:2)

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

inventory_dict[item[0]] = [(item[1],item[2])]

如果您希望以后能够附加内容,则需要在第一次创建时将值设为列表。

您也可以使用collections.defaultdict,这样您就可以:

inventory_dict = collections.defaultdict(list)

然后你就可以省去if-then而只是像这样做循环:

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