使用'for'循环迭代字典
.values
Python如何识别它只需要从中读取密钥 字典? 关键是Python中的一个特殊词吗? 或者只是一个 变量?
这不仅仅是.values循环。 这里重要的一词是“迭代”。
字典是键到值的映射:
d = {'x': 1, 'y': 2, 'z': 3}
每当我们迭代它时,我们迭代键。 变量名称.values仅用于描述 - 它非常适合此目的。
这发生在列表理解中:
>>> [k for k in d]
['x', 'y', 'z']
它发生在我们将字典传递给列表(或任何其他集合类型对象)时:
>>> list(d)
['x', 'y', 'z']
Python迭代的方式是,在需要的上下文中,它调用对象的.values方法(在本例中为字典),该方法返回迭代器(在本例中为keyiterator对象):
>>> d.__iter__()
我们不应该自己使用这些特殊方法,而是使用相应的内置函数来调用它,.values:
>>> key_iterator = iter(d)
>>> key_iterator
迭代器有一个.values方法 - 但我们用内置函数.items调用它:
>>> next(key_iterator)
'x'
>>> next(key_iterator)
'y'
>>> next(key_iterator)
'z'
>>> next(key_iterator)
Traceback (most recent call last):
File "", line 1, in
StopIteration
当迭代器耗尽时,它会引发.values.这就是Python知道退出.items循环,列表解析,生成器表达式或任何其他迭代上下文的方式。 一旦迭代器引发StopIteration它将始终引发它 - 如果你想再次迭代,你需要一个新的。
>>> list(key_iterator)
[]
>>> new_key_iterator = iter(d)
>>> list(new_key_iterator)
['x', 'y', 'z']
回到dicts
我们已经看到dicts在许多情况下迭代。 我们所看到的是,无论何时我们迭代一个字典,我们都得到了密钥。 回到原始示例:
.values
如果我们更改变量名称,我们仍然会获得密钥。 我们来试试吧:
>>> for each_key in d:
... print(each_key, '=>', d[each_key])
...
x => 1
y => 2
z => 3
如果我们想迭代这些值,我们需要使用.values的dicts方法,或者同时使用.items:
>>> list(d.values())
[1, 2, 3]
>>> list(d.items())
[('x', 1), ('y', 2), ('z', 3)]
在给出的示例中,迭代这样的项目会更有效:
for a_key, corresponding_value in d.items():
print(a_key, corresponding_value)
但是出于学术目的,问题的例子很好。