如何通过匹配dict的值,在列表中查找dict的索引?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (155)

我有一个列表:

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

如何通过匹配name ='Tom'来有效地找到索引位置[0],[1]或[2]?

如果这是一个一维列表,我可以做list.index(),但我不知道如何继续搜索列表中的dict的值。

提问于
用户回答回答于
tom_index = next((index for (index, d) in enumerate(lst) if d["name"] == "Tom"), None)
# 1

如果需要从名称中反复获取,则应按名称(使用字典)对它们进行索引一个想法:

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

info_by_name = build_dict(lst, key="name")
tom_info = info_by_name.get("Tom")
# {'index': 1, 'id': '2345', 'name': 'Tom'}
用户回答回答于

一个简单可读的版本是

def find(lst, key, value):
    for i, dic in enumerate(lst):
        if dic[key] == value:
            return i
    return -1

扫码关注云+社区

领取腾讯云代金券