d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print(key, 'corresponds to', d[key])
Python如何认识到它只需要从字典中读取密钥?key是一个特殊的关键字,还是仅仅是一个变量?
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print(key, 'corresponds to', d[key])
Python如何认识到它只需要从字典中读取密钥?key是一个特殊的关键字,还是仅仅是一个变量?
当前回答
key只是一个变量名。
for key in d:
将简单地遍历字典中的键,而不是键和值。要循环键和值,可以使用以下方法:
对于Python 3.x:
for key, value in d.items():
对于Python 2.x:
for key, value in d.iteritems():
为了测试自己,将单词key改为poop。
在Python3.x中,itertists()被替换为简单的items(),它返回一个由dict支持的类似集合的视图,就像itertists(),但更好。这在2.7中也可用作viewitems()。
操作items()将同时适用于2和3,但在2中,它将返回字典(键、值)对的列表,这不会反映items(()调用后对字典的更改。如果您想要3.x中的2.x行为,可以调用list(d.items())。
其他回答
key只是一个变量。
对于Python2.X:
>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> for my_var in d:
>>> print my_var, 'corresponds to', d[my_var]
x corresponds to 1
y corresponds to 2
z corresponds to 3
…或更好,
d = {'x': 1, 'y': 2, 'z': 3}
for the_key, the_value in d.iteritems():
print the_key, 'corresponds to', the_value
对于Python3.X:
d = {'x': 1, 'y': 2, 'z': 3}
for the_key, the_value in d.items():
print(the_key, 'corresponds to', the_value)
对dict进行迭代时,不按特定顺序遍历其键,如您所见:
(Python 3.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))
您可以在GitHub上检查CPython的dicttype的实现。这是实现dict迭代器的方法的签名:
_PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey,
PyObject **pvalue, Py_hash_t *phash)
CPython dictobject.c
我有一个用例,我必须遍历dict以获得键、值对以及指示我所在位置的索引。我是这样做的:
d = {'x': 1, 'y': 2, 'z': 3}
for i, (key, value) in enumerate(d.items()):
print(i, key, value)
请注意,键、值周围的括号很重要,如果没有它们,您将得到ValueError“没有足够的值来解包”。
使用for..遍历字典时。。在..中-语法,它总是在键上迭代(值可以使用dictionary[key]访问)。
要迭代键值对,请使用以下命令:
对于Python 2中dict.iteritems()中的k,v对于Python 3中dict.items()中的k,v