如何用Excel的ISIN与URL列生成无嵌套层级的字典?
解决Pandas Excel转字典时去除额外层级的问题
问题场景
你有一个Excel表格,表头为ISIN和URL,数据如下:
| ISIN | URL |
|---|---|
| ISIN1 | https://mylink3.pdf |
| ISIN2 | https://mylink2.pdf |
你尝试用以下代码将表格转换为字典:
import pandas as pd my_dic = pd.read_excel('PDFDwn.xlsx', index_col=0).to_dict() print(my_dic)
得到的输出却多了一层URL的嵌套:
{'URL': {'ISIN1': 'https://mylink3.pdf', 'ISIN2': 'https://mylink2.pdf'}}
但你期望的是直接以ISIN为键、对应URL为值的扁平字典:
{'ISIN1': 'https://mylink3.pdf', 'ISIN2': 'https://mylink2.pdf'}
两种简单的修改方案
方案一:直接提取目标列转字典
最直观的方式是先选中URL列,再调用to_dict(),这样会自动把你设置为索引的ISIN列作为键:
import pandas as pd # 读取表格并指定ISIN为索引 df = pd.read_excel('PDFDwn.xlsx', index_col=0) # 提取URL列转换为目标格式字典 my_dic = df['URL'].to_dict() print(my_dic)
也可以写成更简洁的一行:
import pandas as pd my_dic = pd.read_excel('PDFDwn.xlsx', index_col=0)['URL'].to_dict()
方案二:从现有嵌套字典中提取目标层级
如果不想改动读取逻辑,直接从你当前得到的嵌套字典中取出URL对应的子字典即可:
import pandas as pd my_dic = pd.read_excel('PDFDwn.xlsx', index_col=0).to_dict()['URL'] print(my_dic)
原理小说明
当你直接调用df.to_dict()时,默认的orient参数是'dict',会生成以列名为外层键、行索引和列值为内层键值对的嵌套结构。而当你单独选中某一列(比如df['URL'])再转字典,就会把该列的索引(也就是你设置的ISIN)作为键,列值作为对应的值,正好匹配你想要的格式。
内容的提问来源于stack exchange,提问作者Shashi Shankar Singh
相关产品推荐
相关产品推荐

