如何在Python中将bool的字符串表示形式解析为bool?

我需要的场景:

  1. 用户输入True或False,默认解析为str。我无法更改解析类型,因为 python 3+ 解析为 str (使用 Python 3.8) 因此,当我解析时,bool(input('Enter True or False'))它会返回True,因为默认 bool 函数仅False在存在空字符串时返回。True否则。

  2. 我有一个我需要的 json 。

它有以下表示:

list_of_visits ='''{"Museum": "True",

"Library": "True",

"Park": "False"}

'''

请注意,如果没有引用,我无法将其表示为:


list_of_visits ='''{"Museum": True,

"Library": True,

"Park": False}

'''

原因解析如下会引发错误:


jsonic = json.loads(list_of_visits)

jsonic

但我在某些地方还需要从 int 和 float 进行解析,并且我无法单独为每种类型编写函数。我正在尝试构建一个一站式解决方案,它可能继承 bool() 的功能并执行此转换,我可以在任何地方使用它,即解决方案不仅可以执行传统的 bool() 操作,而且还能够解析字符串表示形式。


目前我执行以下步骤:


if type(value) == str and value =='True':

    reprs = True

elif type(value) == str and value =='False':

    reprs = False

else:

    reprs = bool(value)


犯罪嫌疑人X
浏览 264回答 1
1回答

杨魅力

您可以定义自己的函数,该函数可以在所有场景中工作,如下所示:def get_bool(key):    return value if value := {'True':True, 'False':False}.get(key) else bool(key)    对于单个值(例如输入),您可以将其解析为:get_bool('False')返回:False对于这样的 json,你可能会这样做:from toolz.dicttoolz import valmapvalmap(get_bool, jsonic)返回:{'Museum': 1, 'Library': 1, 'Park': 0}    对于 3.7 及更低版本:自从 python 3.8 中出现以来,我就爱上了 walrus 运算符。任何寻找较低版本的人可能需要一些重复:def get_bool(key):return {'True':True, 'False':False}.get(key) if  key.title() in {'True':True, 'False':False}.keys() else bool(key)请注意,虽然它确实适用于每种情况,但您的 JSON 表示是错误的。JSON 可以具有布尔值,JSON 的字符串表示形式也可以。但是你必须使用 javascript 语法 astrue和false而不是 Python 的True& False。由于 JSON 是一种 JavaScript 表示法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python