Предложение if
является, пожалуй, самым ясным и наиболее эффективным решением.
Однако вы можете использовать выражение генератора. Это не предварительно вычисляет элементы в области, но дает ленивую итерацию, которая позволяет повторять элементы в области по одному.
Например, учитывая условие, определенное в func
как функцию ключа и значения:
# iterable of objects satisfying condition
objects_filtered = ((k, v) for k, v in objects.items() if func(k, v))
for key, value in objects_filtered:
# do something
Если ваш словарь небольшой или ленивая итерация не требуется, вместо этого вы можете использовать понимание списка:
objects_filtered = [(k, v) for k, v in objects.items() if func(k, v)]
Для итераций, которые удобно помещаются в памяти, списки обычно более эффективны. Но они служат разным целям: если вам нужен ленивый итератор, используйте выражение генератор / генератор; если вам нужны значения в памяти, используйте список.
Настройка итератора словаря по умолчанию для этой задачи не требуется.