通常我使用dict
方法访问keys()
个密钥:
d = {'a':1, 'b':2, 'c':3}
for k in d.keys(): print k
但有时我会看到这段代码:
for k in d: print k
这段代码是否正确?安全
答案 0 :(得分: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)
答案 1 :(得分:4)
虽然已经提到过,但我想在这些讨论中添加一些确切的数字。所以我比较了:
def iter_dtest(dtest):
for i in dtest:
pass
和
def list_dtest(dtest):
for i in dtest.keys():
pass
使用了包含1 000 000个项目的字典(浮动键),我使用timeit
重复100次。结果如下:
Python 2.7.1:
iter_dtest: 3.92487884435s
list_dtest: 6.24848171448s
Python 3.2.1:
iter_dtest: 3.4850587113842555s
list_dtest: 3.535072302413432s
显然,调用dtest.keys()
在Python 2.x中有一些缺点
答案 2 :(得分:3)
第二个代码示例的行为等于调用.keys()
,所以是的,这是正确和安全的。
答案 3 :(得分:0)
不一样。
for k in d: print k
不会创建其他列表,而
for k in d.keys(): print k
创建另一个列表然后迭代它
至少在Python 2中。在Python 3中dict.keys()
是一个迭代器。
因此,您可以使用for k in d.iterkeys()
或for k in d
。两者都导致相同的结果。