我正在使用 OrderedDict 来存储一些重要数据。我想确保不小心向该字典插入新键会引发异常,但我希望字典是可变的。我想要修复 key (在 __init__
中创建之后)。是否可以通过某些图书馆类(class)来做到这一点?还是我必须以某种方式为此实现新的有序类?
示例:
d = FixedOrderedDict( ( ("A", 1), ("B", 2) ) )
print d["A"]
# 1
d["A"] = 11
print d["A"]
# 11
d["C"] = 33
# throws exception
有人建议我查找名为 FrozenDict 的解决方案,但它使 dict 只读 - 无法修改值(分配新值时抛出异常)。这不是我想要实现的。
最佳答案
我不知道标准库中有这样的解决方案(这是一个相当专业的用例)。但是,您可以使用 collections.MutableMapping
(3.3 及以后版本中的 collections.abc.MutableMapping
)免费获得大部分功能。给出或考虑一些我现在可能忽略的小问题,它只是:
from collections import MutableMapping, OrderedDict
class FixedOrderedDict(MutableMapping):
def __init__(self, *args):
self._d = OrderedDict(*args)
def __getitem__(self, key):
return self._d[key]
def __setitem__(self, key, value):
if key not in self._d:
raise KeyError("Must not add new keys")
self._d[key] = value
def __delitem__(self, key):
raise NotImplementedError("Must not remove keys")
def __iter__(self):
return iter(self._d)
def __len__(self):
return len(self._d)
关于python - 具有固定和有序键的可变字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24763464/