Как сделать проверку элементов словаря менее громоздкой?
Мне нужно сделать так, чтобы код после проверки выполнялся, если все элементы словаря имели значение 0. Как сделать код не таким громоздким?
if (dictionary['first'] == 0 and
dictionary['second'] == 0 and
dictionary['third'] == 0 and
dictionary['fourth'] == 0 and
dictionary['fifth'] == 0 and
dictionary['sixth'] == 0 and
dictionary['seventh'] == 0):
print(0)
Проверка элементов циклом for возвращает True, если хоть один элемент = 0, а мне нужно, чтобы возвращало True, только если ВСЕ элементы = 0
for v in dictionary.values():
if v == 0:
print(0)
Или
for k in dictionary.keys():
if dictionary[k] == 0:
print(0)
Ответы (4 шт):
полагаю, можно сделать флаг вот так:
all_null = True
for key in dict:
if dict[key] != 0:
all_null = False
break
if all_null: # TODO
Например, так можно бы (получаем список значений словаря, суммируем, проверяем на равенство 0), но как указали в комментариях, идея плохая - при +1 и -1 тоже будет 0. Так что это пример, как коротко делать не надо:-)
if not sum (dictionary.values()):
print(0)
Попробуйте any(). Возвращает True, если хоть один из элементов имеет значение true. Т.к. требуется наоборот, то нужно подставить not:
if not any(d.values()):
PS. Здесь используется то, что 0 имеет логическое значение False.
А если был бы не 0, а какое-то другое число n то в общем случае проверять можно было бы так:
if all(x == n for x in dictionary.values()):
all проверяет, что условие выполняется для всех элементов, причём, если один из элементов проверку не проходит, то проверка прекращается досрочно (аналог досрочного завершения цикла через break).