Есть ли уже реализованная структура данных в Python, которая чем-то похожа на словарь, но где значения представляют собой набор / дикт (предпочтительнее иметь ключи, но если уже существует нечто подобное, у которого нет элементов с ключами, это не showtopper) и где любой элемент в наборе / dict служит ключом для поиска набора / dict? Это сработало бы в случае, если все задействованные множества были непересекающимися.
Конкретный пример:
Я соединяю 8-битные векторные значения с символами и именами, и я хочу иметь возможность искать одну из этих вещей и получить две другие информации из третьего:
class group_lookup_dict:
def __init__(self):
self.groups = []
def add(self, new_group):
self.groups.append(new_group)
def lookup(self, key):
for group in self.groups:
if key in group.values():
return group
class group_lookup_dict: # edit: this one's better
def __init__(self):
self.main_dict = {}
def add(self, new_group):
if type(new_group) is dict: # it's a dict
iterator = new_group.values()
else: # it's a set (or list, tuple, etc...)
iterator = iter(new_group)
for val in iterator:
self.main_dict[val] = new_group
def lookup(self, key):
return self.main_dict[key]
my_group_lookup_dict = group_lookup_dict()
example_group = {"char": "&", "bits": "00100110", "name": "CHAR_AMPERSAND"} # https://mil.ufl.edu/3744/docs/lcdmanual/characterset.html
my_group_lookup_dict.add(example_group)
print(my_set_lookup_dict.lookup("&"))
>>> {'char': '&', 'bits': '00100110', 'name': 'CHAR_AMPERSAND'}
# also acceptable would be: {'&', '00100110', 'CHAR_AMPERSAND'}
Редактировать: приведенный выше код делает именно то, что я хочу. Мне просто любопытно, есть ли какая-то популярная структура данных, которая работает аналогично, которую я могу использовать без необходимости запоминать, в каком файле сохранено определение класса, или перезаписывать его снова, когда просто ...
from collections import my_cool_group_lookup_dict
... будет достаточно.