我对以下代码感到有点困惑:
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()调用之后发生的对 dict 的更改。如果你想要 3.x 中的 2.x 行为,你可以调用list(d.items()) 。 
并不是密钥是一个特殊的单词,而是字典实现了迭代器协议。您可以在您的类中执行此操作,例如,请参阅此问题以了解如何构建类迭代器。
在字典的情况下,它是在 C 级实现的。有关详细信息,请参阅PEP 234 。特别是标题为 “Dictionary Iterators” 的部分:
字典实现了一个 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))