0

私はこれがあまり好きではありません: 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 以外のデフォルトが必要な場合はどうなりますか?

ラムダを使用できます:

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(key, 'MyDefault') 呼び出しを記述することに対する経済的なトレードオフではありません。

より良いものはありますか(そのための簡単なユーティリティ関数を書くという明らかな解決策はありません)?特に。Python 3で?

4

2 に答える 2

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']
于 2013-08-08T08:58:31.660 に答える