首页 > 解决方案 > 在 python dict 中打印键值时出错:字符串索引必须是整数

问题描述

我正在尝试分别从 python 中的字典中访问所有键和值。数据是excel格式的,所以我把它转换成字典。在tower.json文件中,我得到的输出为:

[{"Item": "LD1C", "Rel": "40410"}, {"Item": "LD1D", "Rel": "40411"}, …..}]

如何打印各种itemsrels单独的?

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

标签: pythonjsondictionarykey-value

解决方案


你为什么访问dat[i]?迭代器不产生范围索引,它们产生值。所以i不是指数,而是实际值。

此外dat,这里是一个字符串,迭代字符串会产生单个字符(作为字符串),你为什么要这样做?

PS:当使用文本模式 IO(open不带'b'标志)时,你真的想encoding明确地提供参数以避免意外。


推荐阅读