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

5 投票
4 回答
3204 浏览
提问于 2025-04-17 14:58

通常,我是通过 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() 有一些缺点。

撰写回答