2024-04-25 14:16:34 发布
网友
所以我有一份字典清单, 例如:
[{'title':'Green eggs and ham', 'author':'dr seuss'}, {'title':'matilda', 'author':'roald dahl'}]
如果malcolm gladwell的离群值存在于这些词典中,最好的搜索方法是什么?你知道吗
我想用暴力检查每个标题和作者,但我觉得应该有更好的方法。你知道吗
如果需要匹配all键值对,可以使用in并让列表为您进行搜索:
in
if {'title': 'outliers', 'author': 'malcolm gladwell'} in yourlist:
否则,如果没有其他索引,则必须“手动”搜索列表。可以将^{} function与生成器表达式一起使用,以使测试足够有效(例如,在找到匹配项时停止搜索),再加上dictionary view objects以测试键值对的子集:
search = {'title': 'outliers', 'author': 'malcolm gladwell'}.viewitems() if any(search <= d.viewitems() for d in yourlist):
即使yourlist中的字典比title和author有更多的键,也会匹配。你知道吗
yourlist
title
author
您可以通过使用额外索引来避免完全扫描:
authors = {} titles = {} for d in yourlist: authors.set_default(d['author'], []).append(d) titles.set_default(d['title'], []).append(d)
通过字典中的特定键创建额外映射。不,您可以测试单个元素:
if any(d['title'] == 'outliers' for d in authors.get('malcolm gladwell', [])):
是一个有限的搜索只是通过所有的书籍马尔科姆格拉德威尔。你知道吗
titles和authors词典将作者和标题字符串映射到与yourlist列表共享的相同词典的列表。但是,从一个这样的结构中添加或删除词典确实需要更新所有结构。这正是关系数据库派上用场的地方,因为它非常擅长为您保留此类索引,并将自动使这些索引保持最新。你知道吗
titles
authors
如果需要匹配all键值对,可以使用
in
并让列表为您进行搜索:否则,如果没有其他索引,则必须“手动”搜索列表。可以将^{} function 与生成器表达式一起使用,以使测试足够有效(例如,在找到匹配项时停止搜索),再加上dictionary view objects以测试键值对的子集:
即使
yourlist
中的字典比title
和author
有更多的键,也会匹配。你知道吗您可以通过使用额外索引来避免完全扫描:
通过字典中的特定键创建额外映射。不,您可以测试单个元素:
是一个有限的搜索只是通过所有的书籍马尔科姆格拉德威尔。你知道吗
titles
和authors
词典将作者和标题字符串映射到与yourlist
列表共享的相同词典的列表。但是,从一个这样的结构中添加或删除词典确实需要更新所有结构。这正是关系数据库派上用场的地方,因为它非常擅长为您保留此类索引,并将自动使这些索引保持最新。你知道吗相关问题 更多 >
编程相关推荐