Ответ 1
any(d)
Это вернет true, если dict. d содержит по крайней мере один верный ключ, иначе false.
Пример:
any({0:'test'}) == False
другой (более общий) способ - проверить количество элементов:
len(d)
Как проверить, что словарь пуст или нет? более конкретно, моя программа начинается с некоторого ключа в словаре, и у меня есть цикл, который повторяется до тех пор, пока в словаре не будет ключа. Общий алгоритм выглядит следующим образом:
Начните с некоторого ключа в dict
пока есть ключ в dict
выполните некоторую операцию на первом ключе в dict
удалить первый ключ
Обратите внимание, что some operation
в вышеперечисленном цикле может добавлять новые ключи в словарь.
я пробовал
for key,value in d.iteritems()
но он не работает, так как во время цикла добавлен новый ключ.
any(d)
Это вернет true, если dict. d содержит по крайней мере один верный ключ, иначе false.
Пример:
any({0:'test'}) == False
другой (более общий) способ - проверить количество элементов:
len(d)
Это будет сделано:
while d:
k, v = d.popitem()
# now use k and v ...
Словарь в булевом контексте False, если он пуст, True в противном случае.
В словаре нет слова "первый", потому что словари не упорядочены. Но popitem будет удалять и возвращать некоторый элемент для вас каждый раз.
Я просто хотел узнать, будет ли в словаре, который будет пытаться извлечь данные из данных, в первую очередь, это, пожалуй, самый простой способ.
d = {}
bool(d)
#should return
False
d = {'hello':'world'}
bool(d)
#should return
True
Просто проверьте словарь:
d = {'hello':'world'}
if d:
print 'not empty'
else:
print 'empty'
d = {}
if d:
print 'not empty'
else:
print 'empty'
Я бы сказал, что путь более pythonic и подходит в режиме онлайн:
Если вам нужно проверить значение только с помощью вашей функции:
if filter( your_function, dictionary.values() ): ...
Когда вам нужно знать, содержит ли ваш dict какие-либо ключи:
if dictionary: ...
В любом случае, использование циклов здесь не Python-way.
Насколько я знаю, цикл 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, ответ выше в основном тот же.
Вот еще один способ сделать это:
isempty = (dict1 and True) or False
Если dict1 пуст, тогда dict1 и True будут давать {}, и это, если разрешено с False, дает False.
если dict1 не пуст, а dict1 и True дает True, и это разрешено с помощью False, дает True