2014-05-11 105 views
0

我有一個列表列表,每個列表中有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我得到了一個「類型錯誤的啓發:‘詮釋’對象不是可迭代「錯誤。

,當我試圖用更換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]]} 

我之所以能夠」 t與它一起工作是,例如,每個值的len值應爲4。第一個類型及其數量是值列表的單獨元素。

我應該提到,在我的代碼的下一步中,我計劃對數量做一些哮喘。

希望我能夠很好地解釋我的問題,並希望你能幫助! 謝謝:)

回答

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

arrrrggggg! !我太親密了! :)你能想象我花了多少時間試圖找出答案,甚至寫出這個問題,而解決方案就在那裏! *愚蠢愚蠢的愚蠢* – Optimesh

+1

@Optimesh:嘿,不要對自己太難。任何人的眼睛都傾向於看着那些嵌套的括號和括號:-) – BrenBarn

+0

謝謝你。 :)任何想法爲什麼簡單的導入「從集合導入defaultdict」將無法正常工作('集合未定義'),但導入集合呢? – Optimesh