Задача: есть словарь в котором и ключ и значения представлены кортежами типа {('SW1', ‘Eth0/1’): ('R1', ‘Eth0/0’), ('SW1', ‘Eth0/2’): ('R2', ‘Eth0/0’)…….} среди записей словаря могут встречаться и зеркальные {('R1', ‘Eth0/0’): ('SW1', ‘Eth0/1’)} нужно получить новый словарь, в котором из двух таких “зеркальных” записей оставлена только одна.
я, конечно, коряво, но решил эту проблему, но понимаю что скорее всего не оптимально. Как, не используя никаких дополнительных модулей, можно написать более красиво и коротко? как пишут на просторах инета более питонистически :-)
мой код:
all_conn={('SW1', 'Eth0/1'): ('R1', 'Eth0/0'), ('SW1', 'Eth0/2'): ('R2', 'Eth0/0'), ('SW1', 'Eth0/3'): ('R3', 'Eth0/0'), ('SW1', 'Eth0/5'): ('R6', 'Eth0/1'), ('R1', 'Eth0/0'): ('SW1', 'Eth0/1'), ('R2', 'Eth0/0'): ('SW1', 'Eth0/2'), ('R2', 'Eth0/1'): ('SW2', 'Eth0/11'), ('R3', 'Eth0/0'): ('SW1', 'Eth0/3'), ('R3', 'Eth0/1'): ('R4', 'Eth0/0'), ('R3', 'Eth0/2'): ('R5', 'Eth0/0')} key_list = [key for key,_ in list(all_conn.items())] value_list = [value for _,value in list(all_conn.items())] uniq_conn = {} for i in range(len(key_list)): if key_list[i] in value_list: if value_list.index(key_list[i]) > i: uniq_conn.update({key_list[i]:all_conn[key_list[i]]}) else: uniq_conn.update({key_list[i]:all_conn[key_list[i]]}) print(uniq_conn)