python - 在 python dict 中打印键值时出错:字符串索引必须是整数
问题描述
我正在尝试分别从 python 中的字典中访问所有键和值。数据是excel格式的,所以我把它转换成字典。在tower.json
文件中,我得到的输出为:
[{"Item": "LD1C", "Rel": "40410"}, {"Item": "LD1D", "Rel": "40411"}, …..}]
如何打印各种items
和rels
单独的?
import xlrd
from collections import OrderedDict
import json
wb = xlrd.open_workbook(r'C:\Users\eumukar\Desktop\test data.xlsx')
sh = wb.sheet_by_index(0)
tower_list = []
for rownum in range(1, sh.nrows):
tower = OrderedDict()
row_values = sh.row_values(rownum)
tower['Item'] = row_values[0]
tower['EUtranCellRelation'] = row_values[1]
tower_list.append(tower)
dat = json.dumps(tower_list)
with open(r'C:\Users\eumukar\Desktop\tower.json', 'w') as f:
f.write(dat)
在尝试打印密钥/项目时,我正在写这个并得到一个错误:
for i in dat:
print(i,dat[i])
1 for i in dat:
----> 2 print(i,dat[i])
TypeError: string indices must be integers
解决方案
你为什么访问dat[i]
?迭代器不产生范围索引,它们产生值。所以i
不是指数,而是实际值。
此外dat
,这里是一个字符串,迭代字符串会产生单个字符(作为字符串),你为什么要这样做?
PS:当使用文本模式 IO(open
不带'b'
标志)时,你真的想encoding
明确地提供参数以避免意外。