Структура данных в стиле Python, в которой любой элемент набора является ключом к этому набору

Есть ли уже реализованная структура данных в 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

... хватит.

Вы можете произвести некоторую обработку словаря и, таким образом, создать структуру «индекса», которая отображает эти значения в добавленную «группу».

Willem Van Onsem 27.10.2018 00:26

Я не слежу за @WillemVanOnsem ... не могли бы вы уточнить?

PistoletPierre 27.10.2018 00:28

Другая проблема здесь может заключаться в том, что если группа - изменчивый, мы не получаем уведомления об изменении значений.

Willem Van Onsem 27.10.2018 00:30

Интересная идея. В stdlib ничего нет, но в PyPI может быть что-то, что вы могли бы установить.

wim 27.10.2018 00:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
58
0

Другие вопросы по теме