Хорошо, обо всем по порядку:
1 / Python Все объекты имеют значение истинности в логическом контексте. Для встроенных типов числовой ноль, пустые контейнеры и пустая строка имеют значение false.
2 / логические операторы 'и' и 'или' не возвращают логическое значение, но для 'и' последний операнд, если оба являются истинными, иначе второй операнд, для 'или' первый операнд это не ложь, иначе последний операнд.
Так вот:
in ospf_protocol['process-id'] or ospf_protocol['process-id-vrf']
не делает то, что вы ожидаете - он первый оценивает ospf_protocol['process-id'] or ospf_protocol['process-id-vrf']
, и вернуть первый из тех объектов, которые не являются пустыми (или последний, если оба они пусты).
Теперь ваш фрагмент кода не является правильным минимальным воспроизводимым примером , и мы не делаем точно знать, что это за типы ospf_protocol['process-id']
и ospf_protocol['process-id-vrf']
- но если они являются списками диктов, вы можете
1 / объединить их:
all_processes = ospf_protocol['process-id'] + ospf_protocol['process-id-vrf']
for item in all_processes:
print(item)
2 / use itertools.chain()
чтобы избежать создания нового списка (интересного только в том случае, если эти списки огромны):
import itertools
all_protocols = itertools.chain(ospf_protocol['process-id'], ospf_protocol['process-id-vrf'])
for item in all_protocols:
print(item)
3 / или просто добавьте первый for
l oop, повторяющийся над tuple
, составленный из обоих ie:
for processe in (ospf_protocol['process-id'], ospf_protocol['process-id-vrf']):
for item in processes:
print(item)
Я не могу, конечно, гарантировать результат, так как, ну, я не действительно точно знаю, что ваши данные л Да, но ты не можешь обвинить меня в этом; -)