如果值不存在,Python Dictionary返回请求的密钥

时间:2012-05-09 21:11:42

标签: python python-2.7

我正在寻找一种能够从字典中获取值的简单方法,如果不存在,则返回用户传入的密钥。

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并手动完成。

3 个答案:

答案 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__,因此它为扩展提供了更好的基础。