为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2023-11-09 21:44:13
我需要的场景:用户输入True或False,默认解析为str。我无法更改解析类型,因为 python 3+ 解析为 str (使用 Python 3.8) 因此,当我解析时,bool(input('Enter True or False'))它会返回True,因为默认 bool 函数仅False在存在空字符串时返回。True否则。我有一个我需要的 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 = Trueelif type(value) == str and value =='False':    reprs = Falseelse:    reprs = bool(value)
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

您可以定义自己的函数,该函数可以在所有场景中工作,如下所示:


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 valmap

valmap(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 表示法。


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信