使用'for'循环遍历字典
我对以下代码感到困惑:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
我不明白的是key
部分。 Python如何识别它只需要从字典中读取密钥? key
是Python中的一个特殊词汇吗? 或者它只是一个变量?
key
只是一个变量名称。
for key in d:
将简单地遍历字典中的键,而不是键和值。 要循环键和值,可以使用以下命令:
对于Python 2.x:
for key, value in d.iteritems():
对于Python 3.x:
for key, value in d.items():
要自己测试,请将单词key
改为poop
。
对于Python 3.x, iteritems()
已经被简单的items()
所取代,它返回一个类似于dict的视图,像iteritems()
但更好。 这在2.7中也以viewitems()
。
操作items()
将适用于2和3,但在2中它将返回字典(key, value)
对的列表,这不会反映在调用items()
之后发生的字典更改。 如果你想在3.x中使用2.x行为,你可以调用list(d.items())
。
这不是关键词,而是字典实现迭代器协议。 你可以在你的类中做到这一点,例如,看看这个问题如何构建类迭代器。
在字典的情况下,它在C级实施。 细节可在PEP 234中找到。特别是,标题为“字典迭代器”的部分:
字典实现一个tp_iter插槽,该插槽返回一个迭代器,该迭代器遍历字典的键。 [...]这意味着我们可以写
for k in dict: ...
这相当于,但比它快得多
for k in dict.keys(): ...
只要不违反字典修改限制(无论是循环还是其他线程)。
将方法添加到显式返回不同类型迭代器的字典中:
for key in dict.iterkeys(): ...
for value in dict.itervalues(): ...
for key, value in dict.iteritems(): ...
这意味着for x in dict
中for x in dict.iterkeys()
。
在dict
迭代迭代通过它的键没有特别的顺序,你可以在这里看到:
编辑:(这不再是在Python3.6中的情况 ,但请注意,它不是行为的保证 )
>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> list(d)
['y', 'x', 'z']
>>> d.keys()
['y', 'x', 'z']
举例来说,使用dict.items()
是一个更好的主意:
>>> d.items()
[('y', 2), ('x', 1), ('z', 3)]
这给你一个元组列表。 当你像这样循环它们时,每个元组都会自动解压缩为k
和v
:
for k,v in d.items():
print(k, 'corresponds to', v)
如果循环体只有几行,在循环dict
时使用k
和v
作为变量名是非常常见的。 对于更复杂的循环,使用更多描述性名称可能是一个好主意:
for letter, number in d.items():
print(letter, 'corresponds to', number)
养成使用格式字符串的习惯是个好主意:
for letter, number in d.items():
print('{0} corresponds to {1}'.format(letter, number))
链接地址: http://www.djcxy.com/p/795.html
上一篇: Iterating over dictionaries using 'for' loops
下一篇: Is there an equivalent of 'which' on the Windows command line?