Есть ли уже реализованная структура данных в Python, которая чем-то похожа на словарь, но где значения представляют собой set / dict (предпочтительнее иметь ключи, но если есть что-то подобное, которое уже существует и не имеет ключевых элементов, это не шоу-стоппер ) и где любой элемент в set / dict служит ключом для поиска set / dict? Это сработает в случае, если все задействованные множества не пересекаются.
Конкретный пример: Я подключаю 8-битные векторные значения к символам и именам, и я хочу иметь возможность искать одну из этих вещей и получать 2 другие части информации из 3-го:
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
... хватит.
Я не слежу за @WillemVanOnsem ... не могли бы вы уточнить?
Другая проблема здесь может заключаться в том, что если группа - изменчивый, мы не получаем уведомления об изменении значений.
Интересная идея. В stdlib ничего нет, но в PyPI может быть что-то, что вы могли бы установить.
Вы можете произвести некоторую обработку словаря и, таким образом, создать структуру «индекса», которая отображает эти значения в добавленную «группу».