我正在使用xlrd
读取XLS文件 import xlrd
iedb = {} #Empty dictionary
book = xlrd.open_workbook('sampledata.xlsx')
sh = book.sheet_by_index(0)
for i in range(1,sh.nrows): #skips first line.
iedb[sh.cell_value(rowx=i,colx=1)] = \
sh.cell_value(rowx=i,colx=2)
我的excel文件是'sampledata.xlsx'
Reference IEB ID Epitope Name
I_N_Glaspole_Allergy_2005 221 Ara_h_2_(1-20)
I_N_Glaspole_Allergy_2005 920 Ara_h_2_(10-29)
I_N_Glaspole_Allergy_2005 921 Ara_h_2_(19-38)
I_N_Glaspole_Allergy_2005 922 Ara_h_2_(28-47)
所以,我得到了如下所需的输出:
{221.0: 'Ara h 2 (1-20)', 920.0: 'Ara h 2 (10-29)', 921.0: 'Ara h 2 (19-38)', 922.0: 'Ara h 2 (28-47)'}
但是在程序中如果我将列号更改为0和1而不是1和2,即:
iedb[sh.cell_value(rowx=i,colx=0)] = \
sh.cell_value(rowx=i,colx=1)
我希望输出有4个条目,但它只给出一个条目如下:
{'I N Glaspole Allergy 2005': 922.0}
请解释..我的版本是3.6.4
答案 0 :(得分:0)
Reference
列具有所有相同的值,dict
键必须是唯一的,因此每个条目只是覆盖上一个条目。
您有几个选项,使用list
,例如:
iedb = []
...
for i in range(1,sh.nrows):
iedb.append((sh.cell_value(rowx=i,colx=0), sh.cell_value(rowx=i,colx=1)))
或者将value
dict
列为结果列表:
iedb = {}
...
for i in range(1,sh.nrows):
iedb.setdefault(sh.cell_value(rowx=i,colx=0), []).append( sh.cell_value(rowx=i,colx=1))