Я получаю 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']
, однако я чувствую, что исходный код должен работать... Благодарен за любое понимание!
Хороший вопрос - извините! Обновил вопрос
для использования со словарем работает над ключами, поэтому концептуально вы просите "acn_num_ACN"["acn_num_ACN"]
. Вы можете посмотреть на meta_batch.values()
и/или meta_batch.items()
или в этом случае просто meta_batch["acn_num_ACN"]
Элементы в вашем понимании списка - это строки, а не словари. Вы можете индексировать (с целочисленными индексами) строки, но у строк нет ключей. Это то, о чем говорит вам сообщение об ошибке.
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']
?
Я бы задал это как отдельный вопрос, так вы получите больше и быстрее ответов.
Итак, как именно выглядит
meta_batch
?