Настройте итератор словаря в python - PullRequest
0 голосов
/ 08 января 2019

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

Так что вместо необходимости писать:

for key, value in objects.items():
    if <condition>:
        #Do something with object.

Я мог бы просто написать:

#Get all object which satisfy <condition>
for key, value in objects.items():
    #do something with object

1 Ответ

0 голосов
/ 08 января 2019

Предложение 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)]

Для итераций, которые удобно помещаются в памяти, списки обычно более эффективны. Но они служат разным целям: если вам нужен ленивый итератор, используйте выражение генератор / генератор; если вам нужны значения в памяти, используйте список.

Настройка итератора словаря по умолчанию для этой задачи не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...