如何将python字典值用作整数,浮点数或布尔值?

时间:2018-09-30 20:04:11

标签: python arrays dictionary int key-value

我正在尝试以整数,浮点数或布尔值而不是字符串的形式读取python中的字典值。我有一个文本文件,其内容如下:

猫:1 食物:1.5 足够:正确

直到现在,我可以读取文本文件并创建字典,如下所示:

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

但是我想做的是读取int浮点型和布尔型的键。 我在想类似的东西:

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 :(得分:2)

您可以使用meta字典,其中key为字典的键,value为要转换为的类型,如果找不到key,则默认为字符串转换:

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并重新加载,以便保留类型。