27

Pythonディクショナリのキー/値ペアから変数を割り当てるための明確なベストプラクティスはありますか?

  • キーが存在する場合
  • キーの値が空の文字列でない場合

それ以外の場合は、変数にデフォルト値を割り当てます。

使用したいdict.get

my_value = dict.get(key, my_default)

my_valueただし、これにより、キーが存在し、値が空の文字列である場合に空の文字列が割り当てられます。以下を使用する方が良いですか:

if key in dict and dict[key]:
    my_value = dict[key]
else:
    my_value = my_default

これは、空の文字列の真実性を利用して、空でない文字列のみがに割り当てられるようにしmy_valueます。

このチェックを実行するためのより良い方法はありますか?

4

2 に答える 2

34

多分あなたは次のようなことを意味します:

a.get('foo',my_default) or my_default

if-elseこれは、あなたが持っている条件と同等であるべきだと思います

例えば

>>> a = {'foo':''}
>>> a.get('foo','bar') or 'bar'
'bar'
>>> a['foo'] = 'baz'
>>> a.get('foo','bar') or 'bar'
'baz'
>>> a.get('qux','bar') or 'bar'
'bar'

他のバージョンに対するこれの利点は非常に明確です。これは、ルックアップを 1 回実行するだけでよく、or回路が短絡するため便利です (True類似値にヒットするとすぐにそれが返されます。True 類似値が見つからない場合orは、2 番目の値が返されます)。

デフォルトが関数の場合、次のように記述すると 2 回呼び出される 可能性d.get('foo',func()) or func()があります。この場合、 の戻り値を保持する一時変数を使用したほうがよいでしょうfunc

于 2013-01-14T17:06:44.117 に答える
19

あなたが望むことをする最も簡単な方法:

my_value = dict.get(key) or my_default

or、false 以外と評価された場合は最初の値を配信し、それ以外の場合は 2 番目の値を配信します。他の言語とは異なり、Python は結果をブール値にすることを強制しません。これは非常に便利なプロパティです。

于 2013-01-14T17:20:58.207 に答える