Вы можете использовать any()
, встроенный здесь, с Python пониманием словаря :
>>> {k: v1 for k, v1 in nest_dic.items() if any(v2 is not None for v2 in v1.values())}
{'dict_1': {'hello': 'world', 'python': 'programming'}, 'dict_2': {'tech': 'geekbuzz', 'OS': None}}
, в котором хранятся под-словари с любое значение, которое не None
.
Вы также можете использовать здесь встроенную функцию all()
:
>>> {k: v1 for k, v1 in nest_dic.items() if not all(v2 is None for v2 in v1.values())}
{'dict_1': {'hello': 'world', 'python': 'programming'}, 'dict_2': {'tech': 'geekbuzz', 'OS': None}}
Который хранит Который хранит под-словари, в которых все не имеют значений None
.
Также в качестве примечания для None
сравнений из Рекомендации по программированию в PEP 8 :
Сравнения с синглетами, такими как None всегда следует делать с is
или is not
, но не с операторами равенства.
Также остерегайтесь писать if x
, когда вы действительно имеете в виду if x is not None
- например, при проверке переменной или аргумента по умолчанию Ни один не был установлен на какое-то другое значение. Другое значение может иметь тип (например, контейнер), который может быть ложным в логическом контексте!