python - 为什么 defaultdict 注册没有赋值的键
问题描述
在 python 3 中,如果定义 a defaultdict
,触发默认值返回一个不存在的键,那么该键将自动放入字典中??这个:
foo = defaultdict(int)
1 in foo # False
foo[1] # 0
1 in foo # True????
这对我来说似乎是错误的。我觉得的目的defaultdict
是允许用户在不将该键放入字典的情况下获得默认值。为什么语言开发人员会选择这个,我该如何避免呢?
解决方案
这与语言设计无关。你可以选择不使用collection.defaultdict
。
您可以通过定义__missing__
方法来定义自己的字典,按照您的意愿行事:
>>> class MyDefaultDict(dict):
... def __init__(self, default_factory):
... self.default_factory = default_factory
... def __missing__(self, key):
... # called by dict.__getitem__ when key is not in the dictionary.
... return self.default_factory()
...
>>>
>>> foo = MyDefaultDict(int)
>>> 1 in foo
False
>>> foo[1]
0
>>> 1 in foo
False
旁注:defaultdict
使用__missing__
.
推荐阅读
- python - 调用具有随机参数的函数列表
- python - 从当前 Python 代码运行另一个 Python 脚本
- xamarin - 等待结果时的 Mvvmcross MvxNavigationService 问题
- javascript - Woocommerce 默认排序不起作用
- html - 块充当内联块?
- python - 按最后 2 位数字对数字列表进行排序
- node.js - 即使 req.session.passport.user 拥有一切,为什么 req.IsAuthenticated() 返回 false
- android - 如何获取android webViewClient的原始HTML响应
- javascript - 带有咖啡和 jquery 的 Rails 5
- string - 使用 AppleScript 在终端中写入字符串