使用或不使用dict.keys()访问Python dict键

时间:2013-02-06 13:38:51

标签: python loops dictionary

通常我使用dict方法访问keys()个密钥:

d = {'a':1, 'b':2, 'c':3}

for k in d.keys(): print k

但有时我会看到这段代码:

for k in d: print k

这段代码是否正确?安全

4 个答案:

答案 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。两者都导致相同的结果。