从字典中获取一些值,默认值不同于 None (Python)

Let*_*t4U 0 python dictionary

我不太喜欢这样:Accessing python dict with multiple key lookup string

所以:

In [113]: d = {'a':1, 'b':2}

In [114]: va, vb = map(d.get, ['a', 'b'])

In [115]: va, vb
Out[115]: (1, 2)
Run Code Online (Sandbox Code Playgroud)

但:

In [116]: va, vb = map(d.get, ['a', 'X'])

In [117]: va, vb
Out[117]: (1, None)
Run Code Online (Sandbox Code Playgroud)

如果需要一个不同于 None 的默认值怎么办?

我可以使用 lambda:

In [118]: va, vb = map(lambda x: d.get(x) or 'MyDefault', ['a', 'c'])

In [119]: va, vb
Out[119]: (1, 'MyDefault')
Run Code Online (Sandbox Code Playgroud)

但是,对于编写 2 个 d.get(key, 'MyDefault') 调用来说,这是一种令人费解的并且不是很经济的权衡。

有什么更好的(缺少为此编写简单实用函数的明显解决方案)?特别是 在 Python 3 中?

fal*_*tru 5

使用collections.defaultdict

>>> from collections import defaultdict
>>> d = defaultdict(lambda: 'MyDefault', {'a':1, 'b':2})
>>> d['c']
'MyDefault'
>>> map(d.get, ['a', 'c'])
[1, None]
>>> map(d.__getitem__, ['a', 'c'])
[1, 'MyDefault']
Run Code Online (Sandbox Code Playgroud)