Python: эффективный способ проверить, свободен ли словарь или нет.

Как проверить, что словарь пуст или нет? более конкретно, моя программа начинается с некоторого ключа в словаре, и у меня есть цикл, который повторяется до тех пор, пока в словаре не будет ключа. Общий алгоритм выглядит следующим образом:

Начните с некоторого ключа в dict
   пока есть ключ в dict
  выполните некоторую операцию на первом ключе в dict
  удалить первый ключ

Обратите внимание, что some operation в вышеперечисленном цикле может добавлять новые ключи в словарь. я пробовал for key,value in d.iteritems()

но он не работает, так как во время цикла добавлен новый ключ.

Ответы

Ответ 1

any(d)

Это вернет true, если dict. d содержит по крайней мере один верный ключ, иначе false.

Пример:

any({0:'test'}) == False

другой (более общий) способ - проверить количество элементов:

len(d)

Ответ 2

Это будет сделано:

while d:
    k, v = d.popitem()
    # now use k and v ...

Словарь в булевом контексте False, если он пуст, True в противном случае.

В словаре нет слова "первый", потому что словари не упорядочены. Но popitem будет удалять и возвращать некоторый элемент для вас каждый раз.

Ответ 3

Я просто хотел узнать, будет ли в словаре, который будет пытаться извлечь данные из данных, в первую очередь, это, пожалуй, самый простой способ.

d = {}

bool(d)

#should return
False

d = {'hello':'world'}

bool(d)

#should return
True

Ответ 4

Просто проверьте словарь:

d = {'hello':'world'}
if d:
  print 'not empty'
else:
  print 'empty'

d = {}
if d:
  print 'not empty'
else:
  print 'empty'

Ответ 5

Я бы сказал, что путь более pythonic и подходит в режиме онлайн:

Если вам нужно проверить значение только с помощью вашей функции:

if filter( your_function, dictionary.values() ): ...

Когда вам нужно знать, содержит ли ваш dict какие-либо ключи:

if dictionary: ...

В любом случае, использование циклов здесь не Python-way.

Ответ 6

Насколько я знаю, цикл for использует итерационную функцию, и вы не должны возиться со структурой, итерации по ней.

Должен ли быть словарь? Если вы используете список, что-то вроде этого может работать:

while len(my_list) > 0:
    #get last item from list
    key, value = my_list.pop()
    #do something with key and value
    #maybe
    my_list.append((key, value))

Обратите внимание, что my_list - это список кортежей (ключ, значение). Единственным недостатком является то, что вы не можете получить доступ по ключу.

EDIT: Nevermind, ответ выше в основном тот же.

Ответ 7

Вот еще один способ сделать это:

isempty = (dict1 and True) or False

Если dict1 пуст, тогда dict1 и True будут давать {}, и это, если разрешено с False, дает False.

если dict1 не пуст, а dict1 и True дает True, и это разрешено с помощью False, дает True