我正在寻找一种能够从字典中获取值的简单方法,如果不存在,则返回用户传入的密钥。
E.g:
>>> lookup = defaultdict(magic)
>>> print lookup['DNE']
'DNE'
>>> print lookup.get('DNE')
'DNE'
>>> print lookup['exists']
'some other value'
>>> print lookup.get('exists')
'some other value'
这些将始终是字符串,但基本上我正在创建语言映射并需要一种简单的方法来获取值,如果存在则返回它,否则返回键。
有没有简单的方法可以做到这一点?或者我应该扩展dict并手动完成。
答案 0 :(得分:16)
我不认为defaultdict
会对您有所帮助,因为生成默认值的函数无权访问请求的密钥。
但是,您使用普通字典并使用get
并使用默认值:
>>> lookup = {}
>>> key = 'DNE'
>>> lookup.get(key, key)
'DNE'
答案 1 :(得分:3)
应该可以使用lambda函数
from collections import defaultdict
a = defaultdict((lambda : 'DNE'))
编辑:抱歉,我误解了这个问题。正如上面的评论已经说过。要走的路是扩展dict类。
>>> class mydict(dict):
... def __missing__(self,key):
... return key
...
>>> a = mydict()
>>> a['asd']
'asd'
答案 2 :(得分:2)
至少在Python 2.7下工作:
from collections import defaultdict
class KeyAwareDefaultDict(defaultdict):
def __missing__(self, key):
if self.default_factory is None:
raise KeyError(key)
self[key] = value = self.default_factory(key)
return value
lookup = KeyAwareDefaultDict((lambda key: key))
与标准字典不同,defaultdict.get()似乎也调用__missing__,因此它为扩展提供了更好的基础。