读取excel文件到dict,但只显示一行

时间:2018-05-13 07:25:32

标签: python python-3.x

我正在使用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

1 个答案:

答案 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))