【问题标题】:Appending tuples as values to existing keys in a dictionary将元组作为值附加到字典中的现有键
【发布时间】:2014-06-29 04:34:02
【问题描述】:

我有一个列表列表,每个列表中有 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' object is not iterable”错误。

当我尝试将 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。第一种类型及其数量是值列表的单独元素。

我应该提到,在我的代码的下一步中,我计划对数量进行一些哮喘治疗。

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

【问题讨论】:

    标签: python list python-2.7 dictionary tuples


    【解决方案1】:

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

    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]))
    

    【讨论】:

    • arrrrggggg!!!我是如此接近! :) 你能想象我花了多少时间试图弄清楚,试图找到答案,甚至写下这个问题,而解决方案就在那里! 愚蠢的愚蠢的愚蠢
    • @Optimesh:呵呵,别对自己太苛刻了。看到那么多嵌套的括号和括号,任何人的眼睛都会变得呆滞:-)
    • 谢谢伙计。 :) 知道为什么简单导入“从集合导入 defaultdict”不起作用('集合未定义')但导入集合可以吗?
    • @Optimesh:如果您使用from collections import defaultdict,那么您需要将defaultdict 称为defaultdict。如果您使用import collections,则需要将其称为collections.defaultdict。您可以在 StackOverflow 上找到有关此的其他问题。
    • 是的,该睡觉了。 :)(凌晨 1 点 15 分)再次感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2020-11-23
    • 2017-12-17
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多