使用第一个列表作为标题从表创建字典

时间:2017-08-26 03:35:36

标签: python python-3.x

使用下表,我想创建一个字典,其中水果作为键,数量作为值

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)

有人可以就如何解决这个问题提供一些指导吗?

3 个答案:

答案 0 :(得分:3)

看起来你想要的是:

<Context>
<Resource
  name="jdbc/src"
  type="javax.sql.DataSource"
  maxActive="4"
  maxIdle="2"
  username="admin****I"
  maxWait="5000"
  validationQuery="select 1"         
  driverClassName="com.mysql.jdbc.Driver"
  password="########"     
  url="jdbc:mysql://pi-******.rhcloud.com:3306/pi"/>

</Context> 

答案 1 :(得分:0)

对于单线运动: map和zip函数在以下情况下很有用:

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']}

答案 2 :(得分:0)

您遇到错误是因为您在num()变量分配行中写了num而不是QuantityList。您将num定义为列表,但您尝试将其称为带括号的函数。

另一种解决方案可能是使用zip对列进行分组,然后构建dict(跳过第一列('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按列对值进行分组。