在字典中搜索比在列表中搜索更快吗?

Is it faster to search in a dictionary than in a list?

我是 Python 的新手,我注意到有两种方法可以在字典中搜索关键字:

d={1: 'a', 2: 'b',...}
if 1 in d: ... 

if 1 in d.keys(): 

我认为它们是相同的,但由于我不得不在包含 100 000 个元素的字典中进行搜索,我发现第二种方法花费了太多时间。我一直在寻找并阅读这是因为 d.keys() returns 一个列表然后搜索元素的时间复杂度是 O(n) 但在字典中搜索的复杂度是 O(1) .是真的吗?

是的,这是真的。大多数字典都是作为哈希映射实现的。所以你有 O(1) 的访问权限。这比列表的 O(n) 快得多。

为什么只需要 O(1)? 因为哈希映射对每个键进行哈希处理,并将其放入生成的存储桶中。如果您搜索一个键,它会散列您的输入并查看是否有值。如果有一个值它 returns 它,否则你会被告知没有条目。快速浏览一下...

如果您对此类内容感兴趣,您应该看看 cormen

的 "introduction to algorithms"