如何将"true"和"false"转换为它们的布尔值?



我需要一个名为REPORTED [" true "," false "," true "," false "," false "]的bool列表,将其转换为类型bool: [true, false, true],然后将其置于执行以下代码的条件下,该代码试图根据2列表(在本例中为s.Body [Physical appearance]s.Reported [true: reported](获得总数的平均百分比,即:计算有多少具有物理方面[fat, muscular, skinny]的人不是Reported [false],并获得每个方面的百分比

我的问题是我不需要;真";或";false";(在str中(如果不在bool中,我不知道如何设置条件来识别我认为我转换了的bool

def porcentaje (Doc):
Datos2 = [s.Cuerpo for s in Doc if s.DENUNCIADO ] #
ConvertidorBool = list(map(lambda ele: ele == "false", Datos2))
Datos=[s.Cuerpo for s in Doc if ConvertidorBool == "false"] # condicion
CC = {Ca: Datos.count(Ca)*100/1000 for Ca in Datos if Ca !=""}
Contador = Counter(CC)
Agrupador = Contador.items()
Porcentaje = dict(Agrupador)
Resultado= print("{}".format(Porcentaje))
return Resultado

您可以使用ast.literal_eval:

>>> import ast
>>> ast.literal_eval(" true ".strip().title())
True
>>> ast.literal_eval(" false ".strip().title())
False

看起来您只需要在值中去掉任何周围的空白,并将其正确大写,就可以创建完全包含bool文字的字符串。

但是,literal_eval不关心类型,所以如果您的列表可以包含像"5""'foo'"这样的非布尔文字,那么literal_eval将很乐意为您创建5'foo'。在这种情况下,显式比较可能是一个更好的想法(也更有效(。

如果你知道数据都是[" true "," false "," true "," false "," false "],你可以做:

li=[" true "," false "," true "," false "," false "]
>>> [True if "true" in s else False for s in li]
[True, False, True, False, False]

或者:

>>> [True if s.strip()=="true" else False for s in li]
[True, False, True, False, False]
# [s.strip()=="true" for s in li] works too...

如果源列表中有不相关的字符串,可以执行以下操作:

>>> [True if "true" in s else False for s in [s for s in li if "true" in s or "false" in s]]
[True, False, True, False, False]

或者:

[True if s=="true" else False for s in [s for s in map(lambda x: x.strip(),li) if s=="true" or s=="false"]]

或者:

di={'true':True, 'false':False}
[di.get(s.strip(), None) for s in li]

看起来您几乎已经自己修复了它。但我建议您尝试用以下内容替换第3行和第4行:

ConvertidorBool = list(map(lambda ele: ele == " true ", Datos2))
Datos=[s.Cuerpo for s in Doc if ConvertidorBool == False] # condicion

感谢@dawg的代码,我能够使我的str(bool(成为真正的bool。我在编写代码时留下代码,删除我开始添加的所有内容:

def percentage (Doc):
DataBool = [s.DENOUNCIADO for s in Doc]
Converter_A_Bool = [True if "true" in s else False for s in DataBool]
Data = [s.Body for s in Doc if Converter_A_Bool [0] == False]
CC = {Ca: Datos.count (Ca) * 100/1000 for Ca in Data if Ca! = ""}
Counter = Counter (CC)
Grouper = Counter.items ()
Dictionary = dict (Grouper)
Result = print ("{}". Format (Dictionary))
return Result

最新更新