Python 2d dictに内部キー/値があるかどうかを確認する単一行の方法はありますか?
今私はこのような何かをします:
if d.has_key(k1):
if d[k1].has_key(k2):
# do something
これを行うためのより良い方法はありますか?
ありがとう
Python 2d dictに内部キー/値があるかどうかを確認する単一行の方法はありますか?
今私はこのような何かをします:
if d.has_key(k1):
if d[k1].has_key(k2):
# do something
これを行うためのより良い方法はありますか?
ありがとう
if k2 in d.get(k1, {}):
# do something
上記のフラグメントは、k1 が実際に存在するかどうかを気にせず、単に k2 が存在する場合にその中に存在するかどうかを知りたい場合に便利です。コード スニペットからわかるように、私はin
演算子を好みますが、同じように簡単に言うことができます。
if d.get(k1, {}).has_key(k2):
# do something
そのイディオムを好むが、has_key
メソッドは Python 3.x で非推奨になっているため、おそらく避ける必要があります。
使用できますin
:
if k1 in d and k2 in d[k1]:
このhas_key
メソッドは廃止され、Python 3.x で削除されました。
関連している:
コメントするほどの評判はありませんが、key1 の値が None の場合、一番上の提案は失敗することに注意してください。
if k2 in d.get(k1, {}):
# do something
その場合は失敗しd = {'k1': None}
ます。キーの値を確認してください。
if d.has_key(k1) and d[k1].has_key(k2):
最初の質問に対する答えはイエスです。私はエリの答えを考えます
if k2 in d.get(k1, {}):
d で k1 を 2 回検索することを避けるため、最適なワンライナーです。2 番目の質問に対する答えは、どちらかのテストが失敗した場合に何をしたいか、および 2 つの失敗のケースで別のことをしたいかによって異なります。もしそうなら:
try:
d1 = d[k1]
if k2 in d1:
<both tests passed>
else:
<second test failed>
except KeyError:
<first test failed>
Python 3.xで非推奨になっているため、 has_key()
useget()
を使用しないでください。has_key()
d.get(k1,None) and d[k1].get(k2,None):