【发布时间】:2013-07-06 12:53:00
【问题描述】:
快速提问,主要满足我对该主题的好奇心。
我正在编写一些带有 SQlite 数据库后端的大型 python 程序,并且将来会处理大量记录,因此我需要尽可能优化。
对于一些功能,我正在通过字典中的键进行搜索。我一直在使用“in”关键字进行原型设计,并计划稍后返回并优化这些搜索,因为我知道“in”关键字通常是 O(n)(因为这只是转换为 python 遍历整个列表并进行比较每个元素)。但是,作为一个 python dict 基本上只是一个哈希映射,python 解释器是否足够聪明来解释:
if(key in dict.keys()):
...code...
到:
if(dict[key] != None):
...code...
这基本上是相同的操作,但顶部是 O(n),底部是 O(1)。
在我的代码中使用底层版本对我来说很容易,但后来我只是好奇并想我会问。
【问题讨论】:
-
我说做最简单的事情,然后再进行分析。
-
其实底部的代码是行不通的。你必须做一些类似于
try: dict[key]; except KeyError: pass; else: #...code...的事情。 -
@TravisGD 这是个好点,我忘了
-
附注:不要将
if条件括在不必要的括号中。阅读和编写大量 Python 的人希望括号表示某种含义——元组、基因表达式或覆盖运算符优先级——他们必须停下来阅读每一行两次,以确保你的括号实际上没有任何意义。 -
另一个旁注:不要命名字典
dict——它隐藏了同名的类型和构造函数,您可能希望稍后使用。
标签: python dictionary hashmap complexity-theory big-o