Python: «если не любой», используя словарь - PullRequest
3 голосов
/ 10 января 2012
if not any(myList[0:5]):

это также работает со словарем вместо списка?Я хочу проверить, все ли первые пять пар ключ-значение в моем словаре имеют значение «Ложь».

Ответы [ 4 ]

10 голосов
/ 10 января 2012

если у вас есть список ключей, которые вы хотите проверить, используйте выражение генератора:

if not any(myDict[key] for key in myKeys):
5 голосов
/ 10 января 2012

Нет, словарные ключи не упорядочены.Вы не можете сказать «первые пять ключей» словаря и означать что-то четко определенное.Вы можете получить список ключей, и в этом случае они, конечно, будут упорядочены в этом списке, но это ничего не говорит о «порядке» в самом словаре.

Что вы можете сделать, так этопроверьте все ключи в списке, чтобы увидеть, является ли соответствующее значение в словаре 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 голосов
/ 10 января 2012

Если вам нужно заказать в словаре, вы можете использовать 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'
0 голосов
/ 10 января 2012

вы просите об этом:

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

как неопределенное, как это может быть, это то, что вы просили

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...