Chciałbym stworzyć strukturę danych, która zachowuje się jak słownik z jedną dodaną funkcjonalnością, która ma na celu śledzenie, które klucze zostały "zużyte". Pamiętaj, że nie mogę po prostu użyć wartości, ponieważ są ponownie używane.Słownik języka Python z pamięcią kluczy, do których uzyskano dostęp?
Struktura powinna wspierać te trzy przypadki, tj oznaczyć klucz do spożycia, gdy dostępne jako:
if key in d:
...
d[key]
d.get(key)
To co napisałem:
class DictWithMemory(dict):
def __init__(self, *args, **kwargs):
self.memory = set()
return super(DictWithMemory, self).__init__(*args, **kwargs)
def __getitem__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__getitem__(key)
def __contains__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__contains__(key)
def get(self, key, d=None):
self.memory.add(key)
return super(DictWithMemory, self).get(key, d)
def unused_keys(self):
"""
Returns the list of unused keys.
"""
return set(self.keys()).difference(self.memory)
Ponieważ nie jestem bardzo obeznany z wewnętrznym dyktowaniem, czy istnieje lepszy sposób na osiągnięcie tego rezultatu?
jak często można użyć 'unused_keys()' ? jeśli udekorowałeś settera, aby dodał klucze do zestawu, a getter spróbowałby usunąć klucze z tego zestawu, mógłbyś mieć lepszą wydajność - nie wiesz o części ** elegance **, pomyślał – Aprillion
Poza tym: dlaczego 'nieużywane_keys' powinny zwracać lista? Nie ma wewnętrznego porządku, więc ma sens, aby zwrócić zestaw. –
@Thomas K: Ze względu na symetrię, 'keys' zwraca listę. – badzil