使用xlrd读取Excel转字典,更换列索引后仅得一条数据的原因咨询
问题原因分析与解决办法
这事儿的核心原因其实很简单——Python字典的键是唯一的,重复的键会被后续的赋值直接覆盖掉。
咱们来拆解下你的场景:
你的Excel第0列(Reference列)的所有行值都是完全一样的:I_N_Glaspole_Allergy_2005,xlrd读取后会把下划线转成空格,变成I N Glaspole Allergy 2005。当你循环每一行时:
- 第一次循环(第1行数据):给键
I N Glaspole Allergy 2005赋值221.0 - 第二次循环(第2行):用同一个键赋值
920.0,直接覆盖了之前的221.0 - 第三次循环:再覆盖成
921.0 - 第四次循环:最终覆盖成
922.0
所以循环结束后,字典里自然就只剩最后一次赋值的结果了。
如果需要保留所有对应的数据
要是你想把同一个Reference对应的所有IEB ID都存下来,可以把字典的值改成列表,每次循环时往列表里追加数据,代码可以改成这样:
import xlrd iedb = {} book = xlrd.open_workbook('sampledata.xlsx') sh = book.sheet_by_index(0) for i in range(1, sh.nrows): ref_key = sh.cell_value(rowx=i, colx=0) ieb_id = sh.cell_value(rowx=i, colx=1) # 如果键不存在,先初始化一个空列表 if ref_key not in iedb: iedb[ref_key] = [] iedb[ref_key].append(ieb_id)
运行后你会得到这样的结果:
{'I N Glaspole Allergy 2005': [221.0, 920.0, 921.0, 922.0]}
内容的提问来源于stack exchange,提问作者Dr. Arpan Mehta
相关产品推荐
相关产品推荐

