Тип преобразования с помощью словаря - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть словарь в Python, который выглядит следующим образом:

result = {'To Kill a Mockingbird': ('Fiction', '11.99', '89'), 'Killing Lincoln': ('Nonfiction', '15.99', '85'), ... }

Я пытаюсь преобразовать числа в целые и числа с плавающей запятой соответственно. Я получаю эту ошибку: TypeError: 'int' object is not subscriptable (имеется в виду преобразование float).

Возможно, здесь есть что-то очень маленькое, чтобы исправить, но я просто упускаю это. Заранее спасибо!

for keys in result: 
    result[keys][1] = float(result[keys][1]) 
    result[keys][2] = int(result[keys][2]) 
    print(result[keys])

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете попробовать что-то вроде этого. Используя ваш код, я также получил ошибку о присвоении кортежей

for keys in result:
    result[keys] = (result[keys][0], float(result[keys][1]), int(result[keys][2]))
    print(result[keys])
0 голосов
/ 13 апреля 2020

Поскольку кортежи являются неизменяемыми, вы должны реконструировать каждый кортеж в словаре, применяя соответствующие функции преобразования к каждому элементу в кортеже. Нет необходимости вызывать str, но это делает решение единообразным и легко расширяемым.

transformers = str, float, int
for key in result:
    result[key] = tuple(f(val) 
                    for f,val in zip(transformers, result[key]))
#{'To Kill a Mockingbird': ('Fiction', 11.99, 89), 
# 'Killing Lincoln': ('Nonfiction', 15.99, 85)}

Примечание : это не самое быстрое решение. Я представляю его исключительно для иллюстрации некоторых неортодоксальных способов решения проблем с Python.

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