我使用所有的人都来打印指定的IANA值的名称在一个包。 因此,所有的字典都具有相同的默认值“保留”。
我不想使用d.get(key,default)
,但通过访问字典d[key]
因此,如果关键不在d,则返回默认值(即同所有字典)。
我不一定需要使用字典,但他们的直觉选择...此外,一本字典我能做到这一点,其中
d = {
1..16 = "RESERVED",
17 : "Foo",
18 : "Bar,
19..255: "INVALID"
}
将是优选的解决方案
元组可能是另一种选择,但后来我容易发生偏移误差分配值...(和我的代码不会是“人类可读”)
噢,Python 2.4中
如果可以,使用马里奥的解决方案 。
如果你不能,你只需要一个子类类字典对象。 现在,你可以做到这一点通过直接从“字典”继承,这将是快速,高效。 对于老版本的Python,与你不能从“字典”继承,有“UserDict中”,一个纯粹的Python字典实现。
有了它,你会做这种方式:
#!/usr/bin/env python
# -*- coding= UTF-8 -*-
import UserDict
class DefaultDict(UserDict.UserDict) :
default_value = 'RESERVED'
def __getitem__(self, key) :
return self.data.get(key, DefaultDict.default_value)
d = DefaultDict()
d["yes"] = True;
print d["yes"]
print d["no"]
请记住,“UserDict中”比“字典”慢。
如果你可以迁移到Python 2.5,有defaultdict类,如这里 。 你可以通过它的初始化,返回你想要的。 否则,你将不得不推出自己实现它,我害怕。
您可以使用下面的类(在Python 2.7测试)只要改变零到任何你喜欢的默认值。
class cDefaultDict(dict):
# dictionary that returns zero for missing keys
# keys with zero values are not stored
def __missing__(self,key):
return 0
def __setitem__(self, key, value):
if value==0:
if key in self: # returns zero anyway, so no need to store it
del self[key]
else:
dict.__setitem__(self, key, value)
文章来源: How to modify the Python 'default' dictionary so that it always returns a default value