加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 一次写字典?

发布时间:2020-12-20 12:30:44 所属栏目:Python 来源:网络整理
导读:我非常希望在 Python中有一个一次写入字典对象,所以: my_dict[1] = 'foo'my_dict[2] = 'bar'my_dict[1] = 'baz' # Raises KeyError 我可以想象做一个简单的,但我想知道是否存在一个更好的思路?我找不到一个. 解决方法 实现子类很容易: class WriteOnceDic
我非常希望在 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(WriteOnceDict,self).__setitem__(key,value)

您还可以提供自定义update()方法,并且根据您希望的严格程度,__ delitem __(),pop(),popitem()和clear()也可能需要重写.

对于超严格版本,在collections.MutableMapping()中混合更容易,因为它在__getitem __,__ setitem__和__delitem__调用方面为您实现了大多数方法:

from collections import MutableMapping

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读