1. ホーム
  2. python

[解決済み] リスト内のdictのインデックスを、dictの値にマッチするように検索する

2022-05-02 02:46:56

質問

ディクショナリーのリストがあります。

list = [{'id':'1234','name':'Jason'},
        {'id':'2345','name':'Tom'},
        {'id':'3456','name':'Art'}]

name = 'Tom'にマッチするインデックス位置 [0], [1], [2] を効率的に見つけるにはどうしたらよいでしょうか?

これが1次元のリストならlist.index()で済むのですが、リスト内のdictsの値を検索して進める方法がよくわかりません。

どのように解決するのですか?

lst = [{'id':'1234','name':'Jason'}, {'id':'2345','name':'Tom'}, {'id':'3456','name':'Art'}]

tom_index = next((index for (index, d) in enumerate(lst) if d["name"] == "Tom"), None)
# 1

名前から繰り返し取得する必要がある場合は、(辞書を使って)名前でインデックスを作成します、このように。 得る の演算がO(1)時間になる。アイデアです。

def build_dict(seq, key):
    return dict((d[key], dict(d, index=index)) for (index, d) in enumerate(seq))

people_by_name = build_dict(lst, key="name")
tom_info = people_by_name.get("Tom")
# {'index': 1, 'id': '2345', 'name': 'Tom'}