Python中关于字典遍历的问题
有一个疑惑,字典作为哈希表,从时间复杂度的角度上来说,获取要比遍历速度快的多,但是用 ipython 测试了一下,发现遍历要比获取快是什么原因啊
def travel():
for key in mydict.keys():
if 99999 == key:
return True
def get():
if mydict.get(99999):
return True
%timeit travel
83.2 ns ± 2.49 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit get
87 ns ± 0.485 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Python中关于字典遍历的问题
你 mydict 里面的数据是不是 1-99999 顺序存的?
在Python里遍历字典有几种常用方法,看你要键、值还是键值对。
遍历键:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict:
print(key)
# 或者
for key in my_dict.keys():
print(key)
遍历值:
for value in my_dict.values():
print(value)
遍历键值对:
for key, value in my_dict.items():
print(f'{key}: {value}')
注意点:
- 遍历时不要修改字典大小(增删键),否则会报错
- 用
items()获取键值对最方便 - Python 3.6+ 字典保持插入顺序
一句话建议: 根据需求选对遍历方法。
。。。你字典多大?
99999 是不是在 keys 的前部?
可能迭代和查找的实现是一样的吧,都是 lookdict
不该把字典所有值查一遍看总时间么
推测字典就一个 99999.。。
%timeit travel()
%timeit get()
才是正确的打开方式。。。
11.6 ms ± 48.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
188 ns ± 5.74 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
直接写了个字典推导式 {x:x for x in range(10000)}
{0:0,…,99999:99999}
已经遍历字典的 key 了呀
out 了一下 dict.keys(),列表是从 0 到 99999 的
多谢,我说嘛,这不合理啊
lz 想搞一个大新闻
对了,if … in 本质也是遍历操作,时间复杂度也是 O(n),我把 travel 改拨了一下,if 9999 in a.keys(),测试了一下,差别还是很小
遍历要比获取快???手动黑人问号脸
字典可以直接判断,不需要 a.keys(), 如果 if 9999 in a.keys() 这是一个列表的 in 判断,应该是 if 9999 in a
7 楼正解
问题的方向错啦

