Пытаться обернуть мою голову (что я чувствую) - это слишком сложный dict / list, чтобы представить отношения между элементами.
mappings = [{'switches': ['switch1', 'switch2'], 'relationships': [{'compute_name': 'compute001', 'servers': ['server1', 'server2']}]},
{'switches': ['switch1', 'switch2'], 'relationships': [{'compute_name': 'compute002', 'servers': ['server3', 'server4']}]},
{'switches': ['switch3', 'switch4'], 'relationships': [{'compute_name': 'compute003', 'servers': ['server5', 'server6']}]},
{'switches': ['switch3', 'switch4'], 'relationships': [{'compute_name': 'compute004', 'servers': ['server7', 'server8', 'server9']}]},
{'switches': ['switch5', 'switch6'], 'relationships': [{'compute_name': 'compute005', 'servers': ['server10', 'server11', 'server12']}]},
{'switches': ['switch5', 'switch6'], 'relationships': [{'compute_name': 'compute006', 'servers': ['server13', 'server14', 'server15', 'server16']}]}]
Как видите, это список dict, где значение иногда является другим списком dict.
Проблема, с которой я столкнулся, заключается в том, что исходные данные содержат «дубликаты». Например, если вы посмотрите на ключевое значение «переключателей», вы увидите, что список, содержащий «переключатель1» + «переключатель2», присутствует дважды. Это действительно так, поскольку данные отношения уникальны.
Я хотел бы найти способ преобразовать этот dict во что-то вроде следующего:
end_mapping = [{'switches': ['switch1', 'switch2'], 'relationships': [{'compute_name': 'compute001', 'servers': ['server1', 'server2']},
{'compute_name': 'compute002', 'servers': ['server3', 'server4']}]},
{'switches': ['switch3', 'switch4'], 'relationships': [{'compute_name': 'compute003', 'servers': ['server5', 'server6']},
{'compute_name': 'compute004', 'servers': ['server7', 'server8', 'server9']}]},
{'switches': ['switch5', 'switch6'], 'relationships': [{'compute_name': 'compute005', 'servers': ['server10', 'server11', 'server12']},
{'compute_name': 'compute006', 'servers': ['server13', 'server14', 'server15', 'server16']}]}
]
В этом наборе данных значения ключей переключателей уникальны, и я "объединил" словари отношений.
Я ломал голову над этим, но пока не нашел способа.
У меня есть отправная точка с :
new_list_of_dict = []
for mapping_dict_a in mappings:
for mapping_dict_b in mappings:
if set(mapping_dict_b['switches']) == set(mapping_dict_a['switches']):
same = True
mapping_dict_a['relationships'].append(mapping_dict_b['relationships'])
new_list_of_dict.append(mapping_dict_a)
break
else:
same = False
print('NOT SAME!')
Но это пока не работает (я уверен, что это неправильно;) - и я получаю либо бесконечное l oop, либо слишком много данных в final_dict.
Есть подсказки?
Спасибо!