2017-08-26 43 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按列分组值。

相关问题