辞書のリストがあります:
list = [{'id':'1234','name':'Jason'},
{'id':'2345','name':'Tom'},
{'id':'3456','name':'Art'}]
name = 'Tom' に一致させてインデックス位置 [0]、[1]、[2] を効率的に見つけるにはどうすればよいでしょうか?
これが 1 次元のリストであれば、list.index() を実行できますが、リスト内の辞書の値を検索してどのように進めればよいかわかりません。
ベストアンサー1
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'}