Ошибка при печати значения ключа в python dict: строковые индексы должны быть целыми числами - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь получить доступ ко всем ключам и значениям из словаря в 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

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Почему вы получаете доступ к dat[i]? Итераторы не дают индексы диапазона, они дают значения. Так что i - это не индекс, а фактическое значение.

Кроме того, здесь dat - это строка, итерирующая строка возвращает отдельные символы (как строки), почему вы это делаете?

PS: при использовании ввода-вывода в текстовом режиме (open без флага 'b') вы действительно хотите явно указать параметр encoding, чтобы избежать неприятных сюрпризов.

0 голосов
/ 28 января 2020

причина ошибки в том, что объекты не перечислены, значит, у них нет индексов, попробуйте ниже код

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

для получения более подробной информации вы можете посетить https://www.geeksforgeeks.org/enumerate-in-python/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...