質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

434閲覧

pythonにおけるdict型要素を持つlistの検索

tanana_m

総合スコア28

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/04/22 09:30

前提・実現したいこと

python3.7を使用して開発を行っています。
dict型の要素を持つリストを作成し、dict中の要素でリストの検索を行いたいです。
具体的には以下の通りです。

①以下のようなリストを作成します

python

1list = [ 2 {"id": 1, "name": "taro", "age": 12}, 3 {"id": 2, "name": "hanako", "age": 16}, 4 {"id": 3, "name": "tsuyoshi", "age": 18}, 5]

②作成したリストについて「idに1が設定されている要素」という条件で検索し、
ヒットしたdict型変数を取得したいです。

※idは全要素中一意であり、重複はありえないという前提です

試したこと

現状は以下のような関数を作成して対応しています。

python

1def get_dict(id, list): 2 for record in list: 3 if record["id"] == id: 4 return record 5 return None

よりスマートな書き方があるような気がしてならないのですが、
自分なりに検索してもそれらしいものが見つからなかったため、
ご教示いただければと思います。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

for文での率直な実装に+1 です
デバッグや保守の事を考えると一番スマートだと思います。

その上で、探されてるのはこういったコードかなと


ジェネレータ式での例

python

1def get_dict(id, list): 2 return next((x for x in list if x["id"] == id), None)
  • ジェネレータ式で条件を絞り込み。
  • next() で最初の要素を返します。(※ 最初に見つかった以降の要素は検索されません)
  • 第二引数で見つからなかった場合の値を指定。

ワンライナー系のコードは、
書き捨てのコード等で使うには楽なのですが、
デバッグが必要な場合や、途中に何か処理を挟みたい時等に、
不便な点もあります。


追記) 余談ですが、Pythonの関数は何もない場合は None を返すので、
末尾の return None は省略可能です。

Pythonでは明示的な方が良いという文化もあるので、
見つかった場合の値を明示的に示してるとみるか、
冗長と感じるかどうかはケース次第ですが。

dict.get や getattr 等ではよく、見つからなかった場合の値を
呼び出し側が指定出来るようになってるので、
明示的にするなら return None を直接書くよりも、こちらの方が良いかもしれません。

def get_dict(id, list, defaultValue=None): ... return defaultValue

投稿2020/04/22 11:29

編集2020/04/22 11:45
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのようなデータ構造を用いる場合,提示されている書き方が最もスマートな書き方だと思います.

投稿2020/04/22 09:53

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanana_m

2020/04/22 10:19

承知しました。 pythonは触り始めてまだ日が浅いため、ご教示いただき助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問