【问题标题】:Error in printing key value in python dict: String indices must be integers在 python dict 中打印键值时出错:字符串索引必须是整数
【发布时间】:2020-01-28 06:13:12
【问题描述】:

我正在尝试单独访问 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

【问题讨论】:

  • json.dumps 返回一个字符串
  • json.dumps 会给你str
  • 使用塔json解析

标签: python json dictionary key-value


【解决方案1】:

错误的原因是对象没有被枚举意味着它没有索引 试试下面的代码

for i in enumerate(dat):
    print(i,dat[i])

更多详情您可以访问https://www.geeksforgeeks.org/enumerate-in-python/

【讨论】:

  • 同样的错误即将到来,但我会检查一下。谢谢!
【解决方案2】:

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

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

PS:当使用文本模式 IO(open 不带 'b' 标志)时,您确实希望明确提供 encoding 参数以避免意外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2014-12-30
    • 2012-12-11
    • 2016-03-26
    相关资源
    最近更新 更多