我有一个充满键对象对的字典。我想让字典不可变,我认为最好/最简单的方法是将它转换为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)
总是说它没有属性(因为我假设这会搜索一个名为 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
我要感谢大家的努力和投入。