使用或不使用 dict.keys() 访问 Python 字典键
通常,我是通过 keys()
方法来访问 dict
的键:
d = {'a':1, 'b':2, 'c':3}
for k in d.keys(): print k
但是有时候我会看到这样的代码:
for k in d: print k
这段代码是正确的吗?安全吗?
4 个回答
3
第二个代码示例的行为和调用 .keys()
是一样的,所以是的,这样做是正确且安全的。
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)
5
虽然这个已经提到过了,但我想给这些讨论加上一些具体的数字。所以我做了个比较:
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
显然,在 Python 2.x 中调用 dtest.keys()
有一些缺点。