如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
当前回答
下面是我用来评估字符串真实性的东西:
def as_bool(val):
if val:
try:
if not int(val): val=False
except: pass
try:
if val.lower()=="false": val=False
except: pass
return bool(val)
与使用eval的结果大致相同,但更安全。
其他回答
dict(实际上是defaultdict)为你提供了一种非常简单的方法:
from collections import defaultdict
bool_mapping = defaultdict(bool) # Will give you False for non-found values
for val in ['True', 'yes', ...]:
bool_mapping[val] = True
print(bool_mapping['True']) # True
print(bool_mapping['kitten']) # False
将这个方法定制为您想要的确切转换行为非常容易——您可以用允许的Truthy和Falsy值填充它,并在没有找到值时让它引发异常(或返回None),或默认为True,或默认为False,或任何您想要的。
我使用
# function
def to_bool(x):
return x in ("True", "true", True)
# test cases
[[x, to_bool(x)] for x in [True, "True", "true", False, "False", "false", None, 1, 0, -1, 123]]
"""
Result:
[[True, True],
['True', True],
['true', True],
[False, False],
['False', False],
['false', False],
[None, False],
[1, True],
[0, False],
[-1, False],
[123, False]]
"""
我喜欢使用三元运算符,因为它对于不应该超过一行的东西来说更简洁一些。
True if my_string=="True" else False
我们可能需要捕捉'true'不区分大小写,如果是这样的话:
>>> x="TrUE"
>>> x.title() == 'True'
True
>>> x="false"
>>> x.title() == 'True'
False
还要注意,对于任何其他既不是真也不是假的输入,它将返回False
JSON解析器在将字符串转换为合理的python类型时也很有用。
>>> import json
>>> json.loads("false".lower())
False
>>> json.loads("True".lower())
True