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 次 |
| 最近记录: |