在字典列表中搜索以查看任何字典中是否存在键/值

2024-04-25 14:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一份字典清单, 例如:

[{'title':'Green eggs and ham', 'author':'dr seuss'}, {'title':'matilda', 'author':'roald dahl'}]

如果malcolm gladwell的离群值存在于这些词典中,最好的搜索方法是什么?你知道吗

我想用暴力检查每个标题和作者,但我觉得应该有更好的方法。你知道吗


Tags: and方法字典titlegreeneggsauthorham
1条回答
网友
1楼 · 发布于 2024-04-25 14:16:34

如果需要匹配all键值对,可以使用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中的字典比titleauthor有更多的键,也会匹配。你知道吗

您可以通过使用额外索引来避免完全扫描:

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', [])):

是一个有限的搜索只是通过所有的书籍马尔科姆格拉德威尔。你知道吗

titlesauthors词典将作者和标题字符串映射到与yourlist列表共享的相同词典的列表。但是,从一个这样的结构中添加或删除词典确实需要更新所有结构。这正是关系数据库派上用场的地方,因为它非常擅长为您保留此类索引,并将自动使这些索引保持最新。你知道吗

相关问题 更多 >