Считать вхождение в списке

Я хотел бы получить совет, чтобы лучше написать следующую строку...

# raise exception in case of backendport or frontendport are not valid
assert len([backend_port['backend']['bport'] for backend_port in self.backend if backend_port['backend']['bport'] == '0']) >= 0, 'backend port not valid: BPNVAL'
assert self.port == 0, 'frontend port not valid: FPNVAL'

Я хотел бы знать, есть ли в словаре с именем backend хотя бы 1 порт, определенный как "0", и вызвать исключение таким образом.

Спасибо!

1 ответ

Давайте сначала исправим >=0 ошибка, которая всегда верна для списка:

len([backend_port['backend']['bport'] for backend_port in self.backend
     if backend_port['backend']['bport'] == '0']) > 0

Затем пропустите len вызов:

[backend_port['backend']['bport'] for backend_port in self.backend
 if backend_port['backend']['bport'] == '0']

Это понимание списка является логическим выражением, которое истинно, когда список не пуст. Но весь список не нужен, и any и понятнее, и быстрее:

any(backend_port['backend']['bport'] == '0' for backend_port in self.backend)
Другие вопросы по тегам