使用'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?
