Hier ist eine wirklich "Reversible Dictionary", Basierend auf Adam Acosta's Lösung, sondern erzwingen val-to-Key-Aufrufe eindeutig sein und leicht zurückgeben Schlüssel von Wert:
from collections import UserDict
class ReversibleDict(UserDict):
def __init__(self, enforce_unique=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.val_to_keys = {}
self.check_val = self.check_unique if enforce_unique else lambda x: x
def __setitem__(self, key, value):
self.check_val(value)
super().__setitem__(key, value)
self.val_to_keys[value] = key
def __call__(self, value):
return self.val_to_keys[value]
def check_unique(self, value):
assert value not in self.val_to_keys, f"Non unique value '{value}'"
return value
Wenn Sie die Einzigartigkeit von Dictionary-Werten erzwingen wollen, stellen Sie sicher, dass Sie enforce_unique=True setzen. Um Schlüssel aus Werten zu erhalten, tun Sie einfach rev_dict(value), um Werte aus Schlüsseln aufzurufen, tun Sie einfach wie üblich dict['key'], hier ist ein Beispiel für die Verwendung:
rev_dict = ReversibleDict(enforce_unique=True)
rev_dict["a"] = 1
rev_dict["b"] = 2
rev_dict["c"] = 3
print("full dictinoary is: ", rev_dict)
print("value for key 'b' is: ", rev_dict["b"])
print("key for value '2' is: ", rev_dict(2))
print("tring to set another key with the same value results in error: ")
rev_dict["d"] = 1
0 Stimmen
Verwandt: Umkehrung / Invertierung einer Wörterbuchzuordnung
1 Stimmen
Würden Sie ein Wort anhand seiner Definition in einem Wörterbuch finden? NEIN.
0 Stimmen
Sie können eine verschlossene Tür nicht öffnen. (Es sei denn, man bricht sie auf.)