【发布时间】:2016-08-04 14:35:57
【问题描述】:
我有一本包含键-对象对的字典。我想让字典不可变,我认为最好/最简单的方法是将其转换为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 的函数)
有没有更好的方法使字典不可变或者如何根据键检索对象?
编辑:
我最终使用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怎么样。据我所知,两者都是不可变的(对于给定的不可变值)。 -
这能回答你的问题吗? What would a "frozen dict" be?
标签: python python-2.7 dictionary frozenset