иметь строку как dict и форматировать ее через eval (не по подписке) - PullRequest
0 голосов
/ 13 сентября 2018

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

'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

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

1 Ответ

0 голосов
/ 13 сентября 2018

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