2017-09-07 52 views
-1

我無法將2d列表轉換爲2d字典。在此之前,我還沒有用過很多2d字典,所以請耐心等待。我只是想知道爲什麼這會不斷拉起KeyError。在這個簡單的例子我想字典看起來像{性別:{名稱:[食品,顏色,數量]}}使用for循環將列表轉換爲2d字典

2dList = [['male','josh','chicken','purple','10'], 
      ['female','Jenny','steak','blue','11']] 
    dict = {} 
    for i in range(len(2dList)): 
     dict[2dList[i][0]][2dList[i][1]] = [2dList[i][2], 2dList[i][3], 2dList[i][4]] 

我不斷收到錯誤消息:KeyError異常:「男性」。我知道這是如何爲1d字典添加密鑰,但我不確定2d字典。我始終認爲它是:

dictionary_name[key1][key2] = value 
+3

您能分享您的預期結果嗎? – voidpro

+0

最好用三個樣品而不是兩個樣品,因爲它會更好地說明您的挑戰。 *提示*:您不能有重複的密鑰。 – Alexander

+2

好吧,你無論如何都不能有一個名爲2dList的變量。如果你的問題得到解答的話, – rahul

回答

1

你可以試試這個:)如果你有你的List

01多個 malefemale它也將工作
List = [['male','josh','chicken','purple','10'], 
     ['female','Jenny','steak','blue','11']] 


d = {} 

for l in List: 
    gender = l[0] 
    name = l[1] 
    food = l[2] 
    color = l[3] 
    number = l[4] 

    if gender in d: # if it exists just add new name by creating new key for name 
     d[gender][name] = [food,color,number] 
    else: # create new key for gender (male/female) 
     d[gender] = {name:[food,color,number]} 
0

你得到一個KeyError因爲你試圖用male訪問詞典中不存在的項作爲重點

可以使用defaultdict代替dict

from collections import defaultdict 

2dList = [['male','josh','chicken','purple','10'], 
      ['female','Jenny','steak','blue','11']] 

dict = defaultdict(list) 
for i in range(len(2dList)): 
    dict[2dList[i][0]][2dList[i][1]] = [2dList[i][2], 2dList[i][3], 2dList[i][4]] 
0

試試這個

twodList = [['male','josh','chicken','purple','10'], 
      ['female','Jenny','steak','blue','11']] 
dic = {twodList[i][0]: {twodList[i][1]: twodList[i][2:]} for i in range(len(twodList))} 

正如在評論中提到一個人,你不能開始與數字的變量。

1

您正在嘗試構建嵌套字典。但是沒有明確地初始化第二層字典。你需要每次都這樣做,遇到一個新的密鑰。順便說一句,2dlist是一種在python中聲明變量的錯誤方法。這應該爲你工作:

dList = [['male','josh','chicken','purple','10'], 
     ['female','Jenny','steak','blue','11']] 
dict = {} 
for i in range(len(dList)): 
    if not dList[i][0] in dict.keys(): 
     dict[dList[i][0]] = {} 
    dict[dList[i][0]][dList[i][1]] = [dList[i][2], dList[i][3], dList[i][4]] 
print(dict) 
1

爲了獲得更多或更少的「理智」的結果使用以下(字典的列表,每個字典是格式{gender: { name: [food, color, number] }}):

l = [['male','josh','chicken','purple','10'], ['female','Jenny','steak','blue','11']] 
result = [{i[0]: {i[1]:i[2:]}} for i in l] 
print(result) 

輸出:

[{'male': {'josh': ['chicken', 'purple', '10']}}, {'female': {'Jenny': ['steak', 'blue', '11']}}] 
0
list1=[['male','josh','chicken','purple','10'],['female','Jenny','steak','blue','11'],['male','johnson','chicken','purple','10'],['female','jenniffer','steak','blue','11']] 
dict = {} 
for i in range(len(list1)): 
    if list1[i][0] in dict: 
     if list1[i][1] in dict[list1[i][0]]: 
      dict[list1[i][0]][list1[i][1]] = [list1[i][2], list1[i][3], list1[i][4]] 
     else: 
      dict[list1[i][0]][list1[i][1]] = {} 
      dict[list1[i][0]][list1[i][1]] = [list1[i][2], list1[i][3], list1[i][4]] 
    else: 
     dict[list1[i][0]] = {} 
     if list1[i][1] in dict[list1[i][0]]: 
      dict[list1[i][0]][list1[i][1]] = [list1[i][2], list1[i][3], list1[i][4]] 
     else: 
      dict[list1[i][0]][list1[i][1]] = {} 
      dict[list1[i][0]][list1[i][1]] = [list1[i][2], list1[i][3], list1[i][4]] 
print dict 

上方的一個,給出以下輸出: { 「男性」:{ 「喬希」:[ 「雞」, 「紫色」, 「10」], 「約翰遜」:[ 「雞」,」紫色」, 「10」]}, 「女性」:{ 「jenniffer」:[ 「牛排」, 「藍」, 「11」], 「珍妮」:[ 「牛排」, 「藍」, 「11」]} }