遍历 string->string dict 只给出每个的第一个字符
Iterating through string->string dict gives only the first character for each
我有一个dict
如下:
values = {'A1' : '123456', 'B1' : 123456, ....}
我知道迭代的正确方法是:
for key, value in values.items():
#do what you want
不小心忘了加.items()
所以我开始觉得奇怪KeyError
我尝试打印,但它只获取每个字符串的第一个字符并将其分配给 key
和 value
我的问题是:为什么 python 这样做?幕后发生了什么?
当你写:
for x1,x2 in iterable:
# ...
这实际上意味着您在 Python 中执行 序列解包 。 Python 评价如下:
x1,x2 = key0
其中 key0
是第一个键(当然还有其他键)。如果 key0
是具有 exactly 两个元素的可迭代对象,则此方法有效。在这种情况下,第一个元素分配给 x1
,第二个元素分配给 x2
.
现在字符串是一个可迭代对象,它的元素是字符。所以字符串 'A1'
有两个元素:'A'
和 '1'
。这意味着如果你写:
key,value = 'A1'
key
将保持 'A'
,value
将保持 '1'
。现在,如果您打印 key
,它将因此打印键的 first 值。
在 values.items()
上使用 for
不是 "magical expression":items()
只是一个产生 2-包含键和相应值的元组。由于元组也是可迭代的,其中项是元组的元素,因此元组在键和值中解包。所以当你写:for key,value in values.items()
时,.items()
会生成一个像('A1','123456')
、('B1',123456)
这样的序列。现在如果这样的元组被分配给 key,value
,就像这样写:
key,value = ('A1','123456')
所以 key
将取元组的第一个元素 ('A1'
) 和 value
第二个 (123456
).
这样想:
values = {'A1' : '123', 'B1' : 456}
for key, value in values.items():
#do what you want, e.g.
print(key)
print(value)
# result:
# A1
# 123
# B1
# 456
现在,没有 .items()
:
values = {'A1' : '123', 'B1' : 456}
for entry in values:
print(entry)
a,b = entry
#do what you want, e.g.
print(a)
print(b)
# result:
# A1
# A
# 1
# B1
# B
# 1
如您所见,脚本正在读取每个字典键并从中获取前 2 个元素(字符串的行为类似于列表)。
我有一个dict
如下:
values = {'A1' : '123456', 'B1' : 123456, ....}
我知道迭代的正确方法是:
for key, value in values.items():
#do what you want
不小心忘了加.items()
所以我开始觉得奇怪KeyError
我尝试打印,但它只获取每个字符串的第一个字符并将其分配给 key
和 value
我的问题是:为什么 python 这样做?幕后发生了什么?
当你写:
for x1,x2 in iterable:
# ...
这实际上意味着您在 Python 中执行 序列解包 。 Python 评价如下:
x1,x2 = key0
其中 key0
是第一个键(当然还有其他键)。如果 key0
是具有 exactly 两个元素的可迭代对象,则此方法有效。在这种情况下,第一个元素分配给 x1
,第二个元素分配给 x2
.
现在字符串是一个可迭代对象,它的元素是字符。所以字符串 'A1'
有两个元素:'A'
和 '1'
。这意味着如果你写:
key,value = 'A1'
key
将保持 'A'
,value
将保持 '1'
。现在,如果您打印 key
,它将因此打印键的 first 值。
在 values.items()
上使用 for
不是 "magical expression":items()
只是一个产生 2-包含键和相应值的元组。由于元组也是可迭代的,其中项是元组的元素,因此元组在键和值中解包。所以当你写:for key,value in values.items()
时,.items()
会生成一个像('A1','123456')
、('B1',123456)
这样的序列。现在如果这样的元组被分配给 key,value
,就像这样写:
key,value = ('A1','123456')
所以 key
将取元组的第一个元素 ('A1'
) 和 value
第二个 (123456
).
这样想:
values = {'A1' : '123', 'B1' : 456}
for key, value in values.items():
#do what you want, e.g.
print(key)
print(value)
# result:
# A1
# 123
# B1
# 456
现在,没有 .items()
:
values = {'A1' : '123', 'B1' : 456}
for entry in values:
print(entry)
a,b = entry
#do what you want, e.g.
print(a)
print(b)
# result:
# A1
# A
# 1
# B1
# B
# 1
如您所见,脚本正在读取每个字典键并从中获取前 2 个元素(字符串的行为类似于列表)。