Closed1

同じ形式のdictの入った配列から条件にあうデータを抽出する方法

jimiijimii

リスト内の辞書から特定条件に合うデータを効率的に抽出する

AWSのAPIのレスポンスで、結構こういう形式のがくるので、整理してみた。

やりたいこと

// これから
users = [
    {"name": "A", "email": "hoge@.co.jp"},
    {"name": "B", "email": "fuga@.co.jp"},
     ...
]
// こうしたい
userA_email = "hoge@.co.jp"

やり方① : ループと条件文を使用する

最も基本的な方法
ループを使用してリストを走査し、条件に一致するデータを抽出する。

userA_email = None
for user in users:
    if user["name"] == "A":
        userA_email = user["email"]

やり方② : リスト内包表記とnext関数を使用する

Pythonicな方法
リスト内包表記とnext関数を組み合わせ。
条件一致する要素を見つけたらループ終了するため効率的。
(要素が後ろの方か存在しない場合はだめだが)

userA_email = next((user["email"] for user in users if user["name"] == "A"), None)

やり方③ : 辞書内包表記を使用する

リストを一度辞書に変換してから、必要なデータを抽出する。
複数のデータを抽出する必要がある場合は便利。

users_dict = {user['name']: user['email'] for user in users}
userA_email = users_dict.get("A")
このスクラップは2024/03/22にクローズされました