私はキーとオブジェクトのペアでいっぱいの辞書を持っています。私は辞書を不変にしたいと思うし、ベスト/最も簡単な方法はfrozensetにキャストすることだと思ったが、frozenset(dict)
とtuple(dict)
にはキーしか格納されていない。不変式のキーとオブジェクトのペアPython
を使用する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)
は、(私はこれがキーという名前の関数を検索すると仮定しているので)属性を持たないと常に言います 辞書を作る良い方法はありますか?どのようにキーに応じてオブジェクトを取得できますか?
編集: 私は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
を。
'' collections.Mapping'をサブクラス化するか、 'Mappingproxy'を使うのはどうですか?私が知る限り、どちらも不変です(与えられた不変の値に対して)。 – MSeifert