2012-01-10 58 views
2
if not any(myList[0:5]): 

这是否也适用于字典而不是列表? 我想检查我的字典的前五个键值对是否都具有值'False'。Python:'如果没有'使用字典

+0

是什么意思对于键值对“有值False”?键值对*是一对*,即2个元素的元组。一个元组的值不能是“False”,因为元组甚至不是“False”的那种类型。另外,“前五个”不是一个有意义的概念。 – 2012-01-10 10:46:22

回答

5

没有,字典键是没有顺序的。你不能说一本字典的“前五个键”,而是指明确的东西。你可以得到一个键列表,在这种情况下,它们当然会在该列表中进行排序,但这并没有说明字典本身的“顺序”。

你可以做的是检查列表中的所有键,看看是否在字典中的相应值是False

the_dict = { "k1": True, "k2": False, "k3": False, "k4": True, "k5": False, "k6": True } 
check_keys = ["k1", "k2", "k3", "k4", "k5"] 
found = 0 
for k in check_keys: 
    if k in the_dict and not the_dict[k]: 
    found += 1 
print "Found %u False values for the checked keys" % found 

注意,只是因为在该键值对的订单字典文字初始化时the_dict,这并不意味着顺序仍然在字典本身。

如果你的键排序,你当然可以手动对它们进行排序,然后提取的五个第一:

>>> print sorted(the_dict.keys()[:5] 
['k1', 'k2', 'k3', 'k4', 'k5'] 
+0

而不是[0:5],我可以使用我想检查的密钥吗?这看起来如何? – user1106770 2012-01-10 10:02:11

0

你问这个:

if not any(myDict.values()[0:5]): 

为未定义,因为它也许这就是你问什么

10

,如果您有要检查密钥列表,用生成器表达式:

if not any(myDict[key] for key in myKeys): 
0

如果在字典中需要排序,你可以使用collections.OrderedDict

from collections import OrderedDict 

d = OrderedDict() 
for key in range(5): 
    d[key] = False 
d[6] = True 

# This following check will succeed          
if not any(d.values()[:5]): 
    print 'First five values are False'