2017-08-26 45 views
0

使用下面的表由表創建字典,我想創建一個字典,水果爲鍵和量作爲值使用第一列表作爲頭部

grades = [['Fruit', 'Apples', 'Bananas', 'Coconut'], 
     ['Jim', '4', '5', '6'], 
     ['Kevin', '7', '8', '10'], 
     ['Clayton', '8', '9', '2']] 

例如:

QuantityList['Apples'] == [4,7,8] 

我在下面的代碼,但我得到一個「'列表'對象不可調用」錯誤。

num=[y[1:] for y in table[1:]] 
fruits = table[0][1:] 
QuantityList={y[0]: {int(i) for i in num()} for y in fruits} 
print(QuantityList) 

有人可以提供一些方向如何解決這個問題嗎?

+1

你的例子不一致。什麼是「成績」? – DyZ

+0

@DYZ是真的,表應該被稱爲「等級」 – alfasin

+0

yup yup.my錯誤。我實際上使用了一個更大的數據集,並且創建了一個示例問題。 – GenXeral

回答

3

看起來你想要的是:

QuantityList = {y: [int(x[i]) for x in num] for i, y in enumerate(fruits)} 
print(QuantityList) # {'Coconut': [6, 10, 2], 'Apples': [4, 7, 8], 'Bananas': [5, 8, 9]} 
0

對於1行的運動: 地圖和拉鍊功能是有用的情況是這樣的:

grades = [['Fruit', 'Apples', 'Bananas', 'Coconut'], 
     ['Jim', '4', '5', '6'], 
     ['Kevin', '7', '8', '10'], 
     ['Clayton', '8', '9', '2']] 

result = {row[0] : row[1:] for row in list(map(list, zip(*grades)))[1:]} 
print(result) 

給你

{'Apples': ['4', '7', '8'], 'Bananas': ['5', '8', '9'], 'Coconut': ['6', '10', '2']} 
0

你有這個錯誤,因爲你寫了num()而不是變量賦值行中的QuantityList中的。您將num定義爲列表,但您試圖將其作爲帶括號的函數進行調用。

另一種解決方案可以是使用zip到組中的列,然後生成字典(跳過之後的第一列('Fruit', 'Jim', 'Kevin', 'Clayton')):

columns = zip(*grades) 
next(columns) # To skip ('Fruit', 'Jim', 'Kevin', 'Clayton') 
QuantityList = {c[0]: [int(n) for n in c[1:]] for c in columns} 
print(QuantityList) # {'Bananas': [5, 8, 9], 'Apples': [4, 7, 8], 'Coconut': [6, 10, 2]} 

隨着zip(*grades)我們傳遞每一行中grades作爲參數zip功能和zip按列分組值。

相關問題