2
3

Python 辞書のget()メソッド、使いこなしていますか?3つの隠れた使い方

Posted at

はじめに

こんにちは!Pythonプログラマーの皆さん。今回は、よく使われる辞書(dict)のget()メソッドについて、あまり知られていない使い方を3つご紹介します。get()メソッドは単純そうで奥が深い、とても便利なメソッドです。早速、隠れた使い方を見ていきましょう!

image.png

1. デフォルト値としての関数

get()メソッドの第2引数には、キーが存在しない場合のデフォルト値を指定できます。実は、この引数には関数を渡すこともできるんです!

def generate_default():
    return "Generated default value"

my_dict = {"a": 1, "b": 2}
value = my_dict.get("c", generate_default)
print(value())  # 出力: Generated default value

# 既存のキーにアクセスする場合
print(my_dict.get("a", generate_default))  # 出力: 1

実行結果:

Generated default value
1

この方法を使えば、キーが存在しない場合にのみ実行される処理を簡単に記述できます。例えば、デフォルト値の生成に時間がかかる場合や、副作用のある処理を行う場合に便利です。

2. 条件分岐の簡略化

get()メソッドを使って、条件分岐を簡略化することができます。特に、複数の条件がある場合に有効です。

def process_a():
    return "Processing A"

def process_b():
    return "Processing B"

def process_default():
    return "Processing Default"

actions = ["b", "a", "c"]
for action in actions:
    result = {
        "a": process_a,
        "b": process_b
    }.get(action, process_default)()
    print(f"Action {action}: {result}")

実行結果:

Action b: Processing B
Action a: Processing A
Action c: Processing Default

この方法を使えば、if-elif-else文の連鎖を避けることができ、コードがすっきりします。

3. ネストした辞書の安全なアクセス

get()メソッドを連鎖させることで、ネストした辞書に安全にアクセスできます。

nested_dict = {
    "level1": {
        "level2": {
            "level3": "Deep value"
        }
    }
}

# 安全なアクセス
value = nested_dict.get("level1", {}).get("level2", {}).get("level3", "Not found")
print(value)  # 出力: Deep value

# 存在しないキーへのアクセス
value = nested_dict.get("level1", {}).get("nonexistent", {}).get("level3", "Not found")
print(value)  # 出力: Not found

# 途中で辞書でない値が返された場合
value = nested_dict.get("level1", {}).get("level2", "Not a dict").get("level3", "Not found")
print(value)  # 出力: Not found

実行結果:

Deep value
Not found
Not found

この方法を使えば、KeyErrorを心配することなく、深くネストした辞書の値にアクセスできます。

公式ドキュメントと参考情報

Pythonの公式ドキュメントでは、dict.get()メソッドについて以下のように説明されています:

dict.get(key[, default])

キーが辞書にある場合はその値を返し、そうでない場合はデフォルトを返します。デフォルトが与えられておらず、キーが辞書に存在しない場合は None を返します。

詳細はPythonの公式ドキュメントをご覧ください。

また、PEP 8(Pythonのスタイルガイド)では、辞書のキーにアクセスする際のベストプラクティスについて言及しています。get()メソッドの使用は、特にキーが存在しない可能性がある場合に推奨されています。詳しくはPEP 8のドキュメントを参照してください。

まとめ

image.png

いかがでしたか?get()メソッドの隠れた使い方を3つ紹介しました。

  1. デフォルト値として関数を使用
  2. 条件分岐の簡略化
  3. ネストした辞書の安全なアクセス

これらのテクニックを使いこなすことで、よりPythonic(Pythonらしい)で効率的なコードが書けるようになります。ぜひ、実際のコードで試してみてください!

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3