mcl*_*fee 4 python dictionary loops
通常我dict使用keys()方法访问密钥:
d = {'a':1, 'b':2, 'c':3}
for k in d.keys(): print k
Run Code Online (Sandbox Code Playgroud)
但有时我看到这段代码:
for k in d: print k
Run Code Online (Sandbox Code Playgroud)
这段代码是否正确?安全?
Inb*_*ose 11
要回答您的明确问题,是的,这是安全的.
要回答你不知道的问题:
在python 2.x中:dict.keys()返回一个键列表.
但是要for k in dict对它们进行迭代.
迭代比构建列表更快.
在python 3+中显式调用dict.keys()并不慢,因为它也返回一个迭代器.
大多数字典需求通常可以通过items()以下方式迭代而不是按键来解决:
for k, v in dict.items():
# k is the key
# v is the value
print '%s: %s' % (k, v)
Run Code Online (Sandbox Code Playgroud)
尽管已经提到了这一点,但我想在这些讨论中添加一些确切的数字。所以我比较了一下:
def iter_dtest(dtest):
for i in dtest:
pass
Run Code Online (Sandbox Code Playgroud)
和
def list_dtest(dtest):
for i in dtest.keys():
pass
Run Code Online (Sandbox Code Playgroud)
使用了包含 1 000 000 个项目的字典(浮动键),并且我使用了timeit100 次重复。结果如下:
Python 2.7.1:
iter_dtest: 3.92487884435s
list_dtest: 6.24848171448s
Python 3.2.1:
iter_dtest: 3.4850587113842555s
list_dtest: 3.535072302413432s
Run Code Online (Sandbox Code Playgroud)
dtest.keys()显然,在 Python 2.x 中调用有一些缺点