1

要素を抽出して比較に使用する前に、要素が辞書にあるかどうかを確認するための「pythonic」アプローチとは何ですか?

例えば:

現在、私は

if "key1" in list2 and list2["key1"]=="5":
  print "correct"

失敗した場合、最初の条件付きで短絡するようにします。ただし、これは長い条件ステートメントにつながります。

しかし、より「pythonic」なアプローチはありますか? 条件をtry catchでラップすることは、さらに悪い考えだと思います。

4

4 に答える 4

7

いいえ-try/exceptは絶対に問題ありません:

try:
    if list2['key1'] == '5':
        # do something
except KeyError:
    # key wasn't found
except ValueError:
    # most likely value wasn't comparable...
于 2013-06-03T19:42:34.640 に答える
6

このアプローチは完全にpythonicです。別の、わずかに異なるのは

if list2.get("key1", <-1,0 or any sensible default, e.g. None>) == 5:
    print "correct"

このアプローチdict.getでは、辞書から値を安全に抽出できるようにする方法を採用します(そしてデフォルト値を指定する方法を提供します)

于 2013-06-03T19:41:46.450 に答える
4
if list2.get("key1")==5:
    print("correct")

ただし、辞書を「list2」とは呼びません。

値を None にできる場合は、別のデフォルトを選択できます。

if list2.get("key1", object()) in my_other_list:
    print("correct")

または例外を使用するか、「長い」方法を使用してください。

于 2013-06-03T19:40:06.397 に答える
0

私の意見では、これを置くための最もpythonicな方法は

    print 'correct' if list2.get('key1') == 5
于 2013-06-03T20:30:35.110 に答える