如何将“true”和“false”转换为布尔值?

Cri*_*ity 2 python csv

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

我的问题是,如果不在 bool 中,我不需要“true”或“false”(在 str 中),并且我不知道如何设置条件来识别我认为我转换的 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
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

您可以使用ast.literal_eval

>>> import ast
>>> ast.literal_eval(" true ".strip().title())
True
>>> ast.literal_eval(" false ".strip().title())
False
Run Code Online (Sandbox Code Playgroud)

看起来您只需要去掉值中任何周围的空格并正确地将它们大写即可创建完全包含bool文字的字符串。

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