for num in range(len(vlan_list)): # проверка что числа последовательные
if vlan_list[num - 1] + 1 == vlan_list[num]:
странная конструкция. На первом проходе у нас будет num = 0 и мы будем смотреть vlan_list[-1] элемент (т.е. последний. Из-за этого вот такая vlan_range("10,11,12,13,14,15") последовательность дает нам 10,10-15. Тут можно начинать цикл с единицы (второй элемент) и заканчивать предпоследним, так как их мы в любом случае будем добавлять либо как отдельные vlan, либо как открывающие/закрывающие диапазон.
Task2
Вот тут не получилось через dict comprehensions сделать
можно вот так:
desc_dict = {line.split()[0]: line.split()[-1] for line in description_output.splitlines()}
лично мне не очень нравятся вот такие многоуровневые вложения, от них, конечно, никуда не денешься, но если можно их избежать, то лучше это делать (ну и классические k, v не понятные названия, if_name, if_descr более говорящие, иначе приходится вспоминать состав словаря).
for k, v in desc_dict.items(): # перебор словаря описаний
if k in lldp_dict.keys(): # избегаем искл-я KeyError
if not v == lldp_dict.get(k):
print(f"For interface {k} description '{v}' is wrong, should be '{lldp_dict.get(k)}'")
можно записать как
for if_name, if_descr in desc_dict.items():
if if_name not in lldp_dict:
# или можно добавить вывод, что нет интерфейса в выводе lldp
continue
lldp_peer = lldp_dict.get(if_name)
if if_descr != lldp_peer:
print(f"For interface {if_name} description '{if_descr}' is wrong, should be '{lldp_peer}'")
но это субъективно. Работать будет в обоих случаях.
@fesenkokd
Task1
Вот тут:
странная конструкция. На первом проходе у нас будет
num = 0
и мы будем смотретьvlan_list[-1]
элемент (т.е. последний. Из-за этого вот такаяvlan_range("10,11,12,13,14,15")
последовательность дает нам10,10-15
. Тут можно начинать цикл с единицы (второй элемент) и заканчивать предпоследним, так как их мы в любом случае будем добавлять либо как отдельные vlan, либо как открывающие/закрывающие диапазон.Task2
Вот тут не получилось через dict comprehensions сделать
можно вот так:
лично мне не очень нравятся вот такие многоуровневые вложения, от них, конечно, никуда не денешься, но если можно их избежать, то лучше это делать (ну и классические k, v не понятные названия, if_name, if_descr более говорящие, иначе приходится вспоминать состав словаря).
можно записать как
но это субъективно. Работать будет в обоих случаях.