Постановка задачи
Учитывая словарь списков,
key_to_list = {
'one': [1, 3, 5, 7],
'two': [2, 4, 6, 8],
'three': [1, 2, 5, 6],
'four': [2, 5, 7, 8]
}
как лучше всего создать сопоставление элементов списков с их ключами?
list_element_to_keys = {
1: {'one', 'three'},
2: {'two', 'three', 'four'},
3: {'one'},
4: {'two'},
5: {'one', 'three', 'four'},
6: {'two', 'three'},
7: {'one', 'four'},
8: {'two', 'four'}
}
Мое решение
from collections import defaultdict
list_element_to_keys = defaultdict(set)
for key, value in key_to_list.items():
for item in value:
list_element_to_keys[item].add(key)
Мысли
Мой друг предположил, что можно использовать понимание словаря, но я продолжаю сталкиваться с проблемами, потому что у нескольких ключей есть списки, которые содержат одни и те же элементы.
Я также думаю, что это может быть какая-то itertools
магия, которая могла бы помочь, но я не уверен.
Словарное понимание
С помощью друга я нашел толкование словаря, которое работает.
from itertools import chain
list_element_to_keys= { i: set(k for k,v in key_to_list.items() if i in v) for i in set(chain.from_iterable(key_to_list.values())) }