Moh*_*mel 3 python iterator iterable
我有一个dict
如下:
values = {'A1' : '123456', 'B1' : 123456, ....}
Run Code Online (Sandbox Code Playgroud)
我知道迭代的正确方法是:
for key, value in values.items():
#do what you want
Run Code Online (Sandbox Code Playgroud)
错误,我忘记添加.items()
,所以我开始变得奇怪KeyError
我尝试打印,但它只获取每个字符串的第一个字符并将其分配给key
和value
我的问题是:为什么 python 这样做?幕后发生了什么?
当你写:
for x1,x2 in iterable:
# ...
Run Code Online (Sandbox Code Playgroud)
这实际上意味着您在 Python 中进行序列解包。Python 对它的评估如下:
x1,x2 = key0
Run Code Online (Sandbox Code Playgroud)
key0
第一个键在哪里(当然还有其他键)。如果key0
是一个恰好具有两个元素的可迭代对象,则此方法有效。在这种情况下,第一个元素被分配给x1
,第二个元素被分配给x2
。
现在一个字符串是一个可迭代的,它的元素是字符。所以一个字符串'A1'
有两个元素:'A'
和'1'
。这意味着如果你写:
key,value = 'A1'
Run Code Online (Sandbox Code Playgroud)
key
将举行'A'
和value
将举行'1'
。现在,如果您打印key
,它将打印该键的第一个值。
在 afor
上values.items()
使用 a不是“神奇的表达式”:items()
只是一个可迭代的,它产生包含一个键和相应值的 2 元组。由于元组也是可迭代的,其中项目是元组的元素,因此元组在键和值中解包。因此,当您编写: 时for key,value in values.items()
,.items()
将生成类似('A1','123456')
,的序列('B1',123456)
。现在,如果将这样的元组分配给key,value
,就像写:
key,value = ('A1','123456')
Run Code Online (Sandbox Code Playgroud)
sokey
将取元组的第一个元素 ( 'A1'
) 和value
第二个 ( 123456
) 。
归档时间: |
|
查看次数: |
2154 次 |
最近记录: |