Cóż, pytanie jest w tytule: w jaki sposób zdefiniować słownik Pythona z niezmiennymi kluczami, ale zmienne wartości? Wpadłem na to (w pythonie 2.x):Definiowanie słownika Pythona z niezmiennymi kluczami, ale zmienne wartości
class FixedDict(dict):
"""
A dictionary with a fixed set of keys
"""
def __init__(self, dictionary):
dict.__init__(self)
for key in dictionary.keys():
dict.__setitem__(self, key, dictionary[key])
def __setitem__(self, key, item):
if key not in self:
raise KeyError("The key '" +key+"' is not defined")
dict.__setitem__(self, key, item)
, ale wydaje mi się (nieoczekiwanie) raczej niechlujny. W szczególności, czy jest to bezpieczne, czy też istnieje ryzyko zmiany/dodania niektórych kluczy, ponieważ dziedziczę z dyktatury? Dzięki.
Cóż, ktoś mógłby przypuszczalnie nazwać 'dict .__ setitem __()' na instancji 'FixedDict', nie? – cdhowie
Powinieneś sprawdzić, aby 'dict.update' wywoływał' __setitem__' - Chociaż, nawet jeśli tak jest, nie jestem pewien czy jest to zależne od implementacji ... – mgilson
('update' omija' __setitem__'') – katrielalex