Python, похожая на dict-структуру данных, где любой элемент набора является ключом к этому набору - PullRequest
0 голосов
/ 27 октября 2018

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

... будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...