Как использовать значения словаря Python как целые числа, числа с плавающей запятой или логические значения? - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь прочитать значения словаря в Python как целые числа или числа с плавающей запятой, а не как строки.У меня есть один текстовый файл со следующим содержанием:

Кошка: 1 Еда: 1,5 Достаточно: True

До сих пор я могу читать текстовый файл и создавать словарь следующим образом:

dict = {
  "Cat": "1",
  "Food": "1.5",
  "Enough": "True"
}

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

if dict.key == "Cat": 
   dict.value is integer
if dict.key == "Food": 
   dict.value is float
if dict.key == "Enough": 
   dict.value is boolean

Однако я не знаю, как написать что-то подобное.Я был бы очень признателен за любую помощь или идею.

Ps.Другой идеей было бы прочитать его в виде строки из моего текстового файла, а затем преобразовать.Но я все еще не могу найти правильного решения или каких-либо примеров, похожих на то, что я ищу.

1 Ответ

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

вы можете использовать мета-словарь с ключом, являющимся ключом вашего словаря, и значением будет тип для преобразования, по умолчанию для преобразования в строку, если ключ не найден:

meta_dict = { "Cat": int, "Food": float, "Enough": bool }
my_dict = { "Cat": "1", "Food": "1.5", "Enough": "True", "misc":"other" }  # adding a string key for the demo

new_dict = { k:meta_dict.get(k,str)(v) for k,v in my_dict.items()}

print(new_dict)

печатает:

{'Cat': 1, 'Food': 1.5, 'Enough': True, 'misc': 'other'}

если у вас нет строковых ключей, а есть только целые числа, числа с плавающей запятой и логические значения, вы можете использовать ast.literal_eval, чтобы угадать тип и преобразовать в него:

import ast
my_dict = { "Cat": "1", "Food": "1.5", "Enough": "True" }
new_dict = { k:ast.literal_eval(v) for k,v in my_dict.items()}

ВВ будущем сохраните и перезагрузите файл как json, чтобы типы были сохранены.

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