让我说说我有设备列表,我需要检查它们的状态,然后脚本才能继续。用简单的方式可以看起来像这样:
devices = {
'dev1': {'ready':False, ...},
'dev2': {'ready':False, ...},
'dev3': {'ready':False, ...}
}
while /exists device with 'ready' == False/:
... some code scanning for devices ...
if /device ready/:
devices[devX]['ready'] = True
我不知道在while语句中应该如何处理。
我找到的最接近的解决方案是:
len([d for d in devices if d['ready'] == True]) > 0
但是它给了我TypeError:字符串索引必须是整数,而不是str
可以请教吗?
答案 0 :(得分:4)
在代码中,您有d
遍历设备中的每个键(而不是每个值)。这就是d['ready']
不起作用的原因:d
是一个字符串,例如'dev1'
。您可以使用devices.values()
来迭代这些值。
如果您要检查devices
字典中是否有任何值,可以使用any
:
if any(x['ready'] for x in devices.values()):
如果要检查它们是否都准备就绪,可以使用all
:
if all(x['ready'] for x in devices.values()):
答案 1 :(得分:3)
问题在于for d in devices
仅返回字典的键。将行更改为
len([d for d, v in devices.items() if v['ready'] == True]) > 0