所以我想创建一个while循环,一旦二维列表中的所有布尔值都为true(特别是字典(,该循环就会停止。
这是我要查询的词典。
tasks = {'bathroom':
{'linus':False,
'ola': False,
'lex': False,
'lotte': False,
'yoan': False,
'daan': False},
'kitchen':
{'linus':False,
'ola': False,
'lex': False,
'lotte': False,
'yoan': False,
'daan': False},
'garbage':
{'linus':False,
'ola': False,
'lex': False,
'lotte': False,
'yoan': False,
'daan': False},
'recycling':
{'linus':False,
'ola': False,
'lex': False,
'lotte': False,
'yoan': False,
'daan': False},
'corridors':
{'linus':False,
'ola': False,
'lex': False,
'lotte': False,
'yoan': False,
'daan': False}}
这是我试图想出的,但它似乎不起作用
while not all(done == true for done in names.values() for names in tasks.values())
He3lixxx说的是正确的;理解顺序不对。
while not all(done for names in tasks.values() for done in names.values())
从正常Python工作流的角度来考虑它,除了值在顶部,而不是嵌套循环内部
while not all(done # value
for names in tasks.values() # outer loop
for done in names.values() # inner loop
)
但如果所有值实际上都是布尔值,则可以将其缩短为
while not all(all(task.values()) for task in tasks.values())
如果你要写出第二种方法,它会
while not all(all(subtask for subtask in task.values()) for task in tasks.values())
这与您的排序类似,但您必须记住all(...)
部分是单个值。所以你只是在做";值外环";,不管";值";是另一个理解列表本身。
嗨,格林,我把你的代码粘贴到我的ide中,并得到了一些错误,我发现的第一个问题是,你的真正布尔值不应该是大写t的类型,所以它不是"真";但是";真";,我看到的第二个问题是,你试图用while循环在一行中解决这个问题,而循环通常需要一个":"并且不能在1行中使用,遗憾的是,我没有找到一种方法来变异你的数据,但我确实找到了一种访问它的方法,这是你可以稍后删除评论的代码:
finished = True
while finished:
'''
access the first dict that is the task's dict
aka kitchen, corridors, bathroom, ect, but it haven't find the names
'''
# this comment on top of this comment is for the first for loop
for task in tasks.values():
'''
find the names in every task and prints them,
you can change the print statement to a line that mutates the data
'''
# this comment is for the second for loop
for names in task.values():
print(names) # prints the data that got access, you can change this later
print(tasks) # prints the whole dict
finished = False
希望我能帮你一点忙,并删除访问数据的麻烦^w^