TypeError: строковые индексы должны быть целыми числами при извлечении значений из словаря

Я получаю TypeError: string indices must be integers при использовании следующего кода для возврата значений из ключа в словаре:

ids_batch = [x['acn_num_ACN'] for x in meta_batch]
ids_batch

Словарь (meta_batch) имеет следующую структуру:

{'acn_num_ACN': ['1107876', '1784088', '1216003'], 'Time_Date': ['201308', '202012', '201411']}

Я ценю, что могу получить значения данного ключа с помощью meta_batch['acn_num_ACN'], однако я чувствую, что исходный код должен работать... Благодарен за любое понимание!

Итак, как именно выглядит meta_batch?

Mark Ransom 12.04.2023 21:03

Хороший вопрос - извините! Обновил вопрос

Jon 12.04.2023 21:10

для использования со словарем работает над ключами, поэтому концептуально вы просите "acn_num_ACN"["acn_num_ACN"]. Вы можете посмотреть на meta_batch.values() и/или meta_batch.items() или в этом случае просто meta_batch["acn_num_ACN"]

JonSG 12.04.2023 21:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Элементы в вашем понимании списка - это строки, а не словари. Вы можете индексировать (с целочисленными индексами) строки, но у строк нет ключей. Это то, о чем говорит вам сообщение об ошибке.

meta_batch = {'acn_num_ACN': ['1107876', '1784088', '1216003'], 'Time_Date': ['201308', '202012', '201411']}

meta_batch_keys = [x for x in meta_batch]
print(meta_batch_keys)
# ['acn_num_ACN', 'Time_Date']

meta_batch_keys_types = [type(x) for x in meta_batch]
print(meta_batch_keys_types)
# [<class 'str'>, <class 'str'>]

meta_batch_keys_substrs = [x[0:2] for x in meta_batch]
print(meta_batch_keys_substrs)
# ['ac', 'Ti']

Вам нужно это, вероятно:

meta_batch = {'acn_num_ACN': ['1107876', '1784088', '1216003'], 'Time_Date': ['201308', '202012', '201411']}
ids_batch = meta_batch['acn_num_ACN']
print(ids_batch)
# ['1107876', '1784088', '1216003']

# or convert strings to integers:
ids_batch = [int(i) for i in meta_batch['acn_num_ACN']]
print(ids_batch)
# [1107876, 1784088, 1216003]

Спасибо, это проясняет. У меня есть еще один раздел кода; meta_batch = [{ 'acn_num_ACN': i['acn_num_ACN'], 'Time_Date': i['Time_Date'], } for i in meta_batch] Чтобы избежать ошибки типа, правильно ли поставить int(i)['acn_num_ACN'] вместо i['acn_num_ACN']?

Jon 13.04.2023 10:56

Я бы задал это как отдельный вопрос, так вы получите больше и быстрее ответов.

Timur Shtatland 13.04.2023 16:45

Другие вопросы по теме