キーとオブジェクトのペアで満たされた辞書があります。辞書を不変にしたいのですが、最良/最も簡単な方法はそれをfrozensetにキャストすることですが、キーのみを保存することfrozenset(dict)
も考えました。tuple(dict)
を使用frozenset(dict.items())
すると、キーとオブジェクトのペアでフリーズセットを取得しているように見えますが、値/キーを取得する方法がわかりません。
「__obfuscators」が辞書である限り、次のコードが機能します
def obfuscate_value(self, key, value):
obfuscator = self.__obfuscators.get(key)
if obfuscator is not None:
return obfuscator.obfuscate_value(value)
else:
return value
フリーズセットで動作させるためにこれを試しました:
def obfuscate_value(self, key, value):
try:
obfuscator = self.__obfuscators[key]
except:
return value
return obfuscator.obfuscate_value(value)
しかし、これはそれを与え、属性を持っていないfrozenset does not have \__getitem__
とself.__obfuscators.__getattribute__(key)
常に言います(これはキーという名前の関数を検索すると仮定しているため)辞書を不変にするより良い方法はありますか、またはキーに応じてオブジェクトを取得するにはどうすればよいですか?
編集:最終的に、dictをタプルにキャストしてからtuple(obfuscator.items())
、独自の値検索関数を作成しました:
def find_obfuscator(self, key):
for item in self.__obfuscators:
x, y = item
if self.case_insensitive:
if x.lower() == key.lower():
return y
else:
if x == key:
return y
皆様のご尽力とご意見に感謝いたします。