我不太喜欢这个: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)
可是:
In [116]: va, vb = map(d.get, ['a', 'X'])
In [117]: va, vb
Out[117]: (1, None)
如果需要默认值不是None,该怎么办?
我可以使用lambda:
In [118]: va, vb = map(lambda x: d.get(x) or 'MyDefault', ['a', 'c'])
In [119]: va, vb
Out[119]: (1, 'MyDefault')
但是,对于写2 d.get(密钥,'MyDefault')来说,这是一种复杂且不经济的权衡。
还有什么比这更好的(没有为此写出简单实用功能的明显解决方案)? ESP。在Python 3中?
答案 0 :(得分:4)
>>> 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']
答案 1 :(得分:0)
稍微短一些:
In [40]: d = {'a':1, 'b':2}
In [41]: va, vb = [d.get(k, 'MyDefault') for k in ['a', 'X']]
In [42]: va, vb
Out[42]: (1, 'MyDefault')