Python dict-подобное устройство для пар ключ-значение, которое позволяет перечислять как ключи - PullRequest
0 голосов
/ 18 октября 2019

У меня есть 2 класса, которые наследуются от enum, назовем их Class1 и Class2, т.е.

class Class1(Enum):
    ItemA = 'ItemA'
    ItemB = 'ItemB'
    ItemC = 'ItemC'

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

d = {Class1.ItemA: {Class2.ItemX: Class1.ItemB, Class2.ItemY: Class1.ItemC},
Class1.ItemB: {Class2.ItemX: Class1.ItemD, Class2.ItemY: Class1.ItemE}}

Как я могу добиться этого, чтобы я все еще мог использовать встроенную магию словарей, таких как:

if Class1.ItemA in d

Любые отзывы приветствуются:)

1 Ответ

1 голос
/ 18 октября 2019

Путем создания пользовательского словаря классов:

class Class1KeyDictionary():
    def __init__(self, *args):
        # Expect iterable of (key, value) pairs
        self.dictionary = {key.value: value for key, value in args}
    def __contains__(self, key):
        return key.value in self.dictionary

У классов Python должен быть уникальный идентификатор, используемый при поиске в словаре, что означает, что такое переопределение в большинстве случаев не требуется.

...