在数组具有特定值的元素时循环

时间:2018-07-18 12:52:51

标签: python

让我说说我有设备列表,我需要检查它们的状态,然后脚本才能继续。用简单的方式可以看起来像这样:

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

可以请教吗?

2 个答案:

答案 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