如何将 bool 的字符串表示解析为 python 中的 bool?
How to parse string representations of bool into bool in python?
我需要的场景:
用户输入True或False,默认解析为str。我无法更改解析类型,因为 python 3+ 解析为 str(使用 Python 3.8)
因此,当我解析 bool(input('Enter True or False'))
时,它 returns True
不管因为默认的 bool 函数只有 returns False
当有一个空字符串时。 True
否则。
我有一个 json 需要它。
它有如下表示:
list_of_visits ='''{"Museum": "True",
"Library": "True",
"Park": "False"}
'''
请注意,如果没有 qoutes,我不能将其表示为:
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)
您可以定义自己的函数,它可以在所有情况下工作:
def get_bool(key):
return value if value := {'True':True, 'False':False}.get(key) else bool(key)
对于单个值,例如输入,您可以将其解析为:
get_bool('False')
哪个returns:False
对于像这样的 json,您可能会这样做:
from toolz.dicttoolz import valmap
valmap(get_bool, jsonic)
哪个returns:
{'Museum': 1, 'Library': 1, 'Park': 0}
对于 3.7 及更低版本:
我爱上了 walrus 运算符,因为它出现在 python 3.8 中。任何寻找较低版本的人可能需要一些重复:
def get_bool(key):
return {'True':True, 'False':False}.get(key) if key.title() in {'True':True, 'False':False}.keys() else bool(key)
请注意,虽然它适用于所有情况,但您的 JSON 表示是错误的。 JSONs 可以有布尔值,JSONs 的字符串表示也可以。但是你必须使用 javascript 语法作为 true
和 false
而不是 Python 的 True
和 False
。因为 JSON 是 javascript 符号。
我需要的场景:
用户输入True或False,默认解析为str。我无法更改解析类型,因为 python 3+ 解析为 str(使用 Python 3.8) 因此,当我解析
bool(input('Enter True or False'))
时,它 returnsTrue
不管因为默认的 bool 函数只有 returnsFalse
当有一个空字符串时。True
否则。我有一个 json 需要它。
它有如下表示:
list_of_visits ='''{"Museum": "True",
"Library": "True",
"Park": "False"}
'''
请注意,如果没有 qoutes,我不能将其表示为:
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)
您可以定义自己的函数,它可以在所有情况下工作:
def get_bool(key):
return value if value := {'True':True, 'False':False}.get(key) else bool(key)
对于单个值,例如输入,您可以将其解析为:
get_bool('False')
哪个returns:False
对于像这样的 json,您可能会这样做:
from toolz.dicttoolz import valmap
valmap(get_bool, jsonic)
哪个returns:
{'Museum': 1, 'Library': 1, 'Park': 0}
对于 3.7 及更低版本:
我爱上了 walrus 运算符,因为它出现在 python 3.8 中。任何寻找较低版本的人可能需要一些重复:
def get_bool(key):
return {'True':True, 'False':False}.get(key) if key.title() in {'True':True, 'False':False}.keys() else bool(key)
请注意,虽然它适用于所有情况,但您的 JSON 表示是错误的。 JSONs 可以有布尔值,JSONs 的字符串表示也可以。但是你必须使用 javascript 语法作为 true
和 false
而不是 Python 的 True
和 False
。因为 JSON 是 javascript 符号。