如何重写Python字典以获取默认值
我想要重新编写Python中访问字典的方式,也就是getitem,让它能够返回默认值。
我想要的功能大概是这样的:
a = dict()
a.setdefault_value(None)
print a[100] #this would return none
有没有什么建议呢?
谢谢!
5 个回答
1
如果你真的不想使用内置的 defaultdict,你需要自己定义一个字典的子类,像这样:
class MyDefaultDict(dict):
def setdefault_value(self, default):
self.__default = default
def __getitem__(self, key):
try:
return self[key]
except IndexError:
return self.__default
3
从Python 2.6开始,有一个叫做defaultdict的内置功能。它的构造函数可以接收一个函数,当找不到某个值时,这个函数会被调用。这样比起直接返回None,更灵活。
from collections import defaultdict
a = defaultdict(lambda: None)
print a[100] #gives None
lambda
是用来快速定义一个没有名字的一行函数的方式。这段代码其实是等价的:
def nonegetter():
return None
a = defaultdict(nonegetter)
print a[100] #gives None
这个模式非常有用,它可以给你一个哈希表,显示每个独特对象的计数。如果使用普通的字典,你就需要处理一些特殊情况,以避免出现KeyError错误。
counts = defaultdict(int)
for obj in mylist:
counts[obj] += 1
11
其实,Python里已经有一个叫做 collections.defaultdict
的东西了:
from collections import defaultdict
a = defaultdict(lambda:None)
print a[100]