搜索词典列表的最有效方法

And*_* M. 13 python dictionary list

我有以下的dicts列表.

people = [
{'name': "Tom", 'age': 10},
{'name': "Mark", 'age': 5},
{'name': "Pam", 'age': 7}
]
Run Code Online (Sandbox Code Playgroud)

对于在dicts列表中搜索的性能而言,这将是最优化的方式.以下是一些不同的方法:

next((item for item in dicts if item["name"] == "Pam"), None)
Run Code Online (Sandbox Code Playgroud)

要么

filter(lambda person: person['name'] == 'Pam', people)
Run Code Online (Sandbox Code Playgroud)

要么

def search(name):
    for p in people:
        if p['name'] == name:
            return p
Run Code Online (Sandbox Code Playgroud)

要么

def search_dictionaries(key, value, list_of_dictionaries):
    return [element for element in list_of_dictionaries if element[key] == value]
Run Code Online (Sandbox Code Playgroud)

任何其他方法也欢迎.谢谢.

小智 16

对函数进行快速计时表明,使用过滤器似乎是所有方法中最快的

%timeit filter(lambda person: person['name'] == 'Pam', people)

1000000个循环,最佳3:263 ns每个循环

  • 使用next会产生731ns的时间
  • 使用搜索方法产生361ns的时间
  • 最后,seach_dictionaries使用811ns


Leo*_*eon 4

如果您正在搜索单个项目,那么这是“最佳”方法

def search(name):
    for p in people:
        if p['name'] == name:
            return p
Run Code Online (Sandbox Code Playgroud)

所有其他实现都将迭代列表中的所有项目,而这个实现将在找到该项目后停止