Иметь строку как dict и форматировать ее с помощью eval (не индексируемый)

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

'temp': 22,56, 'temp_max': 25.6, 'temp_min': 19.0, 'temp_kf': None

показывает просто 22,56. Я нашел код, который сказал нам dict:

s = "'temp': 18.72, 'temp_max': 20.0, 'temp_min': 17.0, 'temp_kf': None"
data = eval('{{{}}}'.format(s))
temperature1 = str(data['temp'])
print(temperature1)

где на выходе выходит как 18,72

Итак, я попытался поместить свою переменную t в виде строки (которая при печати дает тот же точный результат, что и dict внутри s, только с текущими значениями температуры) внутри s .:

s = str(t))
data = eval('{{{}}}'.format(s))
temperature1 = str(data['temp'])
print(temperature1)

И это говорит мне, что s не может быть хеширован, поэтому я изменил его в s = hash(str(t)).

И теперь я получаю ошибку

TypeError: 'set' object is not subscriptable

Почему это так сложно?

Ваш желаемый результат - это просто 22, 56?

vash_the_stampede 13.09.2018 22:22

Да, в основном первая температура, содержащаяся внутри t

Shade Reogen 13.09.2018 22:27

Откуда вообще взялась ваша струна s? Вам следует изменить код, который производит s, а не пытаться постобработать s, если это вообще возможно.

user2357112 supports Monica 13.09.2018 22:30

@ user2357112 ну я вообще понятия не имею, я думал, что могу предоставить t вместо S, но это не работает

Shade Reogen 13.09.2018 22:34
0
4
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, что проблема здесь в том, как вы настроили свой словарь, вы на самом деле только создали string, который похож на словарь, взгляните на это, а затем также посмотрите на некоторые другие справочные источники для правильной структуры словаря.

Решение

dicta = {
    'temp': '22, 56', 'temp_max': 25.6, 'temp_min': 19.0, 'temp_kf': None
}

print(dicta['temp'])

Выход

(xenial)vash@localhost:~/python$ python3.7 split.py 
22, 56

Вы можете украсить это такими ярлыками

print(f"Temp: {dicta['temp']}")

Это печатает:

(xenial)vash@localhost:~/python$ python3.7 split.py 
Temp: 22, 56

Да, сэр, если бы это был ответ, который вы искали, это поможет мне, если вы можете подтвердить ответ, а также не позволит другим работать над решением решенной проблемы! Ваше здоровье!

vash_the_stampede 13.09.2018 22:32

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