Я застрял в проблеме, в которой мне нужно найти общий «родитель» элементов в списке.
Вот проблема -
У меня есть справочный файл - hierarchy.json
и этот файл загружается как словарь в моем суперклассе.
{
"DATE": ["ISO", "SYSTEM", "HTTP"],
"IP": ["IPv4", "IPv6"],
"PATH": ["UNIX", "WINDOWS"]
}
В качестве входных данных я получаю list
значений и ожидаю получить набор элементов , которые принадлежатк тому же родителю (ссылаясь на файл hierarchy.json
) в качестве вывода.Еще лучше, если бы я мог получить имя родителя, это было бы здорово.
input_list = ["ISO", "UNIX", "HTTP"]
result = do_something(input_list)
print('RESULT:\t', result)
>>> RESULT: set("ISO","HTTP")
По сути, я хочу сделать наборы элементов, которые принадлежат разным "родителям" в элементе.
Я знаю, что это можно сделать O(n^3)
, просматривая каждый элемент списка.Это очевидно не лучший способ достижения результата.
Вот что я пробовал -
def do_something(input_list: list, reference_dir: dict) -> list:
result_list = []
for lists in reference_dir.values():
results = []
for i in input_list:
for j in input_list:
if i != j:
if set([i,j]).issubset(set(lists)):
results.extend(set([i,j]))
result_list.append(set(results))
return result_list
input_list = ["ISO", "UNIX", "HTTP", "SYSTEM","WINDOWS"]
reference_dir = {"DATE": ["ISO", "SYSTEM", "HTTP"],"IP": ["IPv4", "IPv6"],"PATH":["UNIX", "WINDOWS"]}
result = do_something(input_list, reference_dir)
print('RESULT:\t', (result))
>>> RESULT: [{'SYSTEM', 'HTTP', 'ISO'}, set(), {'UNIX', 'WINDOWS'}]
Есть ли способ оптимизировать это / реализовать это влучший способ?
Отредактировано (добавлено) ->
ТАКЖЕ,
, если бы я мог получить имя 'parent' в качестве вывода, это было быбыть УДИВИТЕЛЬНЫМ.
>>> RESULT: [DATE, PATH]
Спасибо.