相关疑难解决方法(0)

867
推荐指数
8
解决办法
61万
查看次数

Python字典键."在"复杂性

快速提问主要是为了满足我对这个话题的好奇心.

我正在编写一些带有SQlite数据库后端的大型python程序,将来会处理大量的记录,所以我需要尽可能地进行优化.

对于一些函数,我在字典中搜索键.我一直在使用"in"关键字进行原型设计,并计划稍后返回并优化这些搜索,因为我知道"in"关键字通常是O(n)(因为这只是转换为python迭代整个列表并进行比较每个元素).但是,由于python dict基本上只是一个哈希映射,python解释器是否足够智能解释:

if(key in dict.keys()):
    ...code...
Run Code Online (Sandbox Code Playgroud)

至:

if(dict[key] != None):
    ...code...
Run Code Online (Sandbox Code Playgroud)

它基本上是相同的操作,但顶部是O(n),底部是O(1).

我很容易在我的代码中使用底部版本,但后来我只是好奇并且想我会问.

python complexity-theory big-o dictionary hashmap

46
推荐指数
3
解决办法
3万
查看次数

如何在dictionary.keys()中键入比字典中的键慢?

在阅读Michael Driscoll的Python 101时,我得到了关于检查字典中是否存在密钥的解释.我在我的机器上检查了它,其中包含一个字典,其中包含值为其顺序的键,以及一个测量检索键时间的函数(随机选取)'a''z''t'

这是我的功能:

def f(d, flag):
start_time = time.time()
if flag:
    print("t" in d)
else:
    print("t" in d.keys())
print("--- %s seconds ---" % (time.time() - start_time))
Run Code Online (Sandbox Code Playgroud)

以下是结果:

>>> f(dict,True)
True
--- 0.03937530517578125 seconds ---

>>> f(dict,False)
True
--- 0.05114388465881348 seconds ---
Run Code Online (Sandbox Code Playgroud)

但是,我仍然没有得到它.我认为这key in dict.keys()将导致迭代更小的集合,这将更快.是否有一些特殊的实施inkeys()导致这种情况?

python performance dictionary python-3.x

2
推荐指数
1
解决办法
123
查看次数