gpt4 book ai didi

python - 一次性字典?

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:19 25 4
gpt4 key购买 nike

我很想在 Python 中有一个一次写入的字典对象,这样:

my_dict[1] = 'foo'
my_dict[2] = 'bar'
my_dict[1] = 'baz' # Raises KeyError

我可以想象制作一个简单的食谱,但我想知道是否存在经过深思熟虑的食谱?我找不到。

最佳答案

实现子类很容易:

class WriteOnceDict(dict):
def __setitem__(self, key, value):
if key in self:
raise KeyError('{} has already been set'.format(key))
super().__setitem__(key, value)

您还可以提供自定义的 update() 方法,并且根据您想要的严格程度,__delitem__()pop()popitem()clear() 可能也需要覆盖。

对于超严格版本,混入collections.abc.MutableMapping()更容易因为它在 __getitem____setitem____delitem__ 调用方面为您实现了大多数方法:

from collections.abc import MutableMapping

class StrictWriteOnceDict(MutableMapping, dict):
# dict implementations to override the MutableMapping versions
__getitem__ = dict.__getitem__
__iter__ = dict.__iter__
__len__ = dict.__len__

def __delitem__(self, key):
raise KeyError('Read-only dictionary')

def __setitem__(self, key, value):
if key in self:
raise KeyError('{} has already been set'.format(key))
dict.__setitem__(self, key, value)

允许删除就像用 __delitem__ = dict.__delitem__ 替换 __delitem__ 方法一样简单。

关于python - 一次性字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com