python-3.x - 如何在python中打印具有布尔值的字典?

我有一系列字典,它们都包含相同的键,但是,有不同的值, 基本上,它由4个键值组成。

isOpen值上,本质上我想过滤出基于它的接口, 可以看到,它们是布尔格式的(True/False),所以,我使用 1/0,但是,它一直返回:


TypeError: list indices must be integers or slices, not dict



这是我目前所拥有的代码:


status = [


{'name': 'Carrousel', 'wait': 0, 'isOpen': True, 'single_rider': None},


{'name': 'Balloon Flite', 'wait': 0, 'isOpen': True, 'single_rider': None},


{'name': 'Skyrush', 'wait': 0, 'isOpen': False, 'single_rider': None}, 


{'name': 'sooperdooperLooper','wait': 5,'isOpen': True,'single_rider': None},


{'name': 'Fahrenheit', 'wait': 20, 'isOpen': True, 'single_rider': None}


]



for i in status:


 if (status[i]['isOpen' == 1]):


 print (i)



基于列表中的值,我想打印isOpentrue值。

像这样:


[{'name': 'Carrousel', 'wait': 0, 'isOpen': True, 'single_rider': None},


{'name': 'Balloon Flite', 'wait': 0, 'isOpen': True, 'single_rider': None},


{'name': 'sooperdooperLooper','wait': 5,'isOpen': True,'single_rider': None},


{'name': 'Fahrenheit', 'wait': 20, 'isOpen': True, 'single_rider': None}]



如果你查看结果,Skyrush被忽略,因为它没有打开.

先谢谢您!

时间:

使用列表推导,


[el for el in status if el["isOpen"]]



这个迭代遍历status中的每个 dict,过滤出"isopen"是true的。

如果您想修改当前的技术,您应该:


for i in status:


 if i['isOpen']:


 print(i)



这里,i引用了列表中的单个 dict , 然后检查它isOpen是否为 true,如果是,则打印它。

尝试这个:


for itme in status:


 if item['isOpen']:


 print (item)



这里有两种修复方法:


for i in status:



i是列表中的元素, 让我们给它一个更好的名字:


for item in status:



同样,这意味着你不能做status[i](或 status[item] ), 最后,你需要具有键'isOpen'的值:


 if item['isOpen']:



请注意,你不应该将比较==放在括号内, 实际上,因为这个值是布尔型(TrueFalse ),所以,你根本不需要进行比较。

最后,你可以打印 item:


 print(item)



把这些都放在一起:


for item in status:


 if item['isOpen']:


 print(item)



下面是使用 python lambda的一些示例,


list(filter(lambda x: x['isOpen'], status))



使用 itertools


from itertools import filterfalse



list(filterfalse(lambda x: not x['isOpen'], status))



你的问题在于如何定义for循环, 如果需要通过列表元素访问的循环,则代码应类似于下面的代码:


for i in status:


 if i['isOpen']:


 print(i)



如果要访问元素,则应按索引在列表中使用此选项:


for i in range(len(status)):


 if status[i]['isOpen']:


 print(status[i])



就像其他人所说的,要检查它是否是布尔值,只需按键访问布尔值,而不是值为 1.

...