python - 如何在python中实现自己的自定义字典类

标签 python

我正在学习 python 类(class),并且正在尝试从 collections 模块创建我自己的 defaultdict 版本。这是我尝试过的:-

class Mydict(dict):
    def __missing__(self, key):
        self.key = []
        return []

这是交互式 shell 的输出:-

>>> d = Mydict()
>>> d['x']
#outputs []
>>> d['x'].extend([1,2,3,4,5])
>>> print(d)
# Outputs {}

我不明白为什么它不在d 对象中存储 key x?我想念什么?

最佳答案

编辑:

获取返回的存储值而不是新列表:

In [143]: class Mydict(dict):
     ...:     def __missing__(self, key):
     ...:         self.__setitem__(key, [])
     ...:         return self[key]
     ...:     

In [144]: d = Mydict()

In [145]: d[2].extend([1, 2, 3])

In [146]: d[2]
Out[146]: [1, 2, 3]

dict 使用 __setitem__ 设置键值对,所以你需要使用它而不是设置属性:

In [113]: class Mydict(dict):
     ...:     def __missing__(self, key):
     ...:         self.__setitem__(key, [])
     ...:         return []
     ...:   

In [114]: d = Mydict()

In [115]: d[1]
Out[115]: []

In [116]: d
Out[116]: {1: []}

FWIW,您可以使用 d.__dict__vars(d) 通过常规方式获取您设置的属性字典:

In [117]: class Mydict(dict):
     ...:     def __missing__(self, key):
     ...:         self.__setattr__(key, 'foo')
     ...:         self.__setitem__(key, 'bar')
     ...:         return []
     ...:   

In [118]: d = Mydict()

In [119]: d['x']
Out[119]: []

In [120]: d
Out[120]: {'x': 'bar'}

In [121]: vars(d)
Out[121]: {'x': 'foo'}

关于python - 如何在python中实现自己的自定义字典类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129922/

相关文章:

python - "pip wheel"和 "pip download"的区别?

Python:解析大型 json 文件

Python 3.5.1 和 fdb 1.5.1 - fdb.fbcore.Cursor 对象位于 0x00175BB0

Python,在多个函数中共享 mysql 连接 - 传递连接或游标?

python - 使用 Celery 和 Python 将输入和图像处理作业发送到多台机器

java - TCP Java 服务器,Python 客户端字符串不相等

python - py.test Tracebacks : Highlight my code, 框架的折叠框架

python - 类型错误 : Can't convert 'int' object to str implicitly(python)

python - while 异步中的 True 循环会阻止代码的其他部分工作 Discord.py

python - 使用 Python 和 lxml 抓取时如何选择 "Load more results"按钮