Python 迭代字典

Python 迭代字典,python,Python,我有一个字典,其中的值是列表元素: dict1={'A':[9,0,8],'B':[6,5,4],'C':[]} 现在我必须处理这个字典,以检查字典中的所有值是否都是空列表;如果是这样,收集钥匙 有没有比简单地遍历条目更好的选择?一旦有了字典,就必须遍历条目才能对其进行过滤: keys = [key for key, value in dict1.items() if not value] if len(keys) != len(dict1): # Do something abou

我有一个字典,其中的值是列表元素:

dict1={'A':[9,0,8],'B':[6,5,4],'C':[]}
现在我必须处理这个字典,以检查字典中的所有值是否都是空列表;如果是这样,收集钥匙


有没有比简单地遍历条目更好的选择?

一旦有了字典,就必须遍历条目才能对其进行过滤:

keys = [key for key, value in dict1.items() if not value]

if len(keys) != len(dict1):
    # Do something about the mis-match

您可以测试dict值的真实性:

di={'A':[9,0,8],'B':[6,5,4],'C':[], 'D':[0], 'E': []}

truthy= [k for k in di if di[k]]
falsy= [k for k in di if not di[k]]

print 'truthy:{}, falsy:{}'.format(truthy,falsy)
印刷品:

truthy:['A', 'B', 'D'], falsy:['C', 'E']
您还可以使用过滤器:

truthy=filter(lambda k: di[k], di)
falsy=filter(lambda k: not di[k], di)

不检查所有问题,你怎么能知道?(这个问题可以用多种方式来阅读……考虑用一个例子或现有的代码来解释它的工作或不起作用)。我正在寻找一个比字典上的for循环更好的选择。我们肯定只需要在最坏的情况下仔细查看所有的条目。正如Lattyware所指出的。非常合法的地点@Haidro!优点是
any()
将短路。猜测这取决于空列表是常见情况还是不常见情况。如果这种情况并不罕见,您将毫无理由地检查dict1.values()两次。如果不寻常,这是一个有用的测试。@drewk为什么要做两次?(这里我并不真正关心这一点:我相信这是可读的方式)。我想这在OP中有点含糊不清,但假设具有零长度列表的实际键是相关的,则需要再次迭代dict来找到它。@drewk我没有回答这个问题。。。我读到的问题是:“收集所有键,如果所有值都是
[]
”:
truthy=filter(lambda k: di[k], di)
falsy=filter(lambda k: not di[k], di)