将电子表格的列存储在Python字典中

mau*_*bio 6 python excel dictionary xlrd

我有一个存储在Excel文件中的表,如下所示:

Species     Garden Hedgerow Parkland Pasture Woodland
Blackbird       47       10      40        2        2
Chaffinch       19        3       5        0        2
Great Tit       50        0      10        7        0
House Sparrow   46       16       8        4        0
Robin            9        3       0        0        2
Song Thrush      4        0       6        0        0

我正在使用xlrdPython库来读取这些数据.我将它读入列表列表(将表的每一行存储为列表)没有问题,使用下面的代码:

from xlrd import open_workbook
wb = open_workbook("Sample.xls")
headers = []
sdata = []
for s in wb.sheets():
    print "Sheet:",s.name
    if s.name.capitalize() == "Data":
        for row in range(s.nrows):
            values = []
            for col in range(s.ncols):
                data = s.cell(row,col).value
                if row == 0:
                    headers.append(data)
                else:   
                    values.append(data)
            sdata.append(values)
Run Code Online (Sandbox Code Playgroud)

很明显,这headers是一个存储列标题并sdata包含表数据的简单列表,存储为列表列表.这是他们的样子:

标题:

[u'Species', u'Garden', u'Hedgerow', u'Parkland', u'Pasture', u'Woodland']
Run Code Online (Sandbox Code Playgroud)

SDATA:

[[u'Blackbird', 47.0, 10.0, 40.0, 2.0, 2.0], [u'Chaffinch', 19.0, 3.0, 5.0, 0.0, 2.0], [u'Great Tit', 50.0, 0.0, 10.0, 7.0, 0.0], [u'House Sparrow', 46.0, 16.0, 8.0, 4.0, 0.0], [u'Robin', 9.0, 3.0, 0.0, 0.0, 2.0], [u'Song Thrush', 4.0, 0.0, 6.0, 0.0, 0.0]]
Run Code Online (Sandbox Code Playgroud)

但我想这些数据存储到一个Python字典,每列作为包含每列的所有值列表的关键.例如(仅显示部分数据以节省空间):

dict = {
    'Species': ['Blackbird','Chaffinch','Great Tit'], 
    'Garden': [47,19,50], 
    'Hedgerow': [10,3,0], 
    'Parkland': [40,5,10], 
    'Pasture': [2,0,7], 
    'Woodland': [2,2,0]
} 
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:我怎样才能做到这一点?我知道我可以按列而不是按行读取数据,如上面的代码片段,但我无法弄清楚如何将列存储在字典中.

提前感谢您提供的任何帮助.

b4h*_*and 2

一旦有了列,就相当简单了:

dict(zip(headers, sdata))
Run Code Online (Sandbox Code Playgroud)

实际上,在您的示例中看起来可能是行数据,即便如此,这仍然相当简单,您也sdata可以使用以下方法转置表:zip

dict(zip(headers, zip(*sdata)))
Run Code Online (Sandbox Code Playgroud)

这两个之一就是您所要求的。