我有一个存储在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
我正在使用xlrd Python库来读取这些数据.我将它读入列表列表(将表的每一行存储为列表)没有问题,使用下面的代码:
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)
很明显,header是一个存储列标题的简单列表,sdata包含表数据,存储为列表列表.这是他们的样子:
标题:
[u'Species',u'Garden',u'Hedgerow',u'Parkland',u'Pasture',u'Woodland']
SDATA:
[[u'Blackbird',47.0,10.0,40.0,2.0,2.0],[u'Chaffinch',19.0,3.0,5.0,0.0,[u'Great Tit',50.0,7.0,0.0],[u'House Sparrow',46.0,16.0,8.0,4.0,[u'Robin',9.0,[u'Song Thrush',6.0,0.0]]
但我想将这些数据存储到Python字典中,每列作为包含每列所有值的列表的键.例如(仅显示部分数据以节省空间):
dict = { 'Species': ['Blackbird','Chaffinch','Great Tit'],'Garden': [47,19,50],'Hedgerow': [10,3,0],'Parkland': [40,5,10],'Pasture': [2,7],'Woodland': [2,2,0] }
所以,我的问题是:我怎样才能做到这一点?我知道我可以按列而不是按行读取数据,如上面的代码片段,但我无法弄清楚如何将列存储在字典中.
提前感谢您提供的任何帮助.
解决方法
一旦你有了列,这很容易:
dict(zip(headers,sdata))
实际上,看起来你的例子中的sdata可能是行数据,即便如此,这仍然相当容易,你也可以用zip转置表格:
dict(zip(headers,zip(*sdata)))
这两个中的一个是你要求的.