今天我在 Python 中遇到了一个关于字符串和字典的非常奇怪的事情。有人可以向我解释为什么 print 语句在第一个 for 循环中有效但在第二个 for 循环中失败吗?
test = 'ab'
test_dict = {}
test_dict[test] = 1
for x, y in test_dict:
print('%s %s' % (x,y))
for x,y in test:
print('%s %s' % (x,y))
最佳答案
两个循环都被打破了。第一个循环碰巧起作用是因为test
恰好是两个字符长的非常特殊的巧合,所以可以解包成两个变量 x
和 y
。
要迭代一个字典的键和值,写:
for k,v in d.items():
...
如果您只想要 key ,您可以这样做:
for k in d:
...
详细地说,当您遍历一个字典时,它会遍历键。
for x,y in test_dict
字典只有一个键,"ab"
。因此,在第一次也是唯一一次迭代中,它将该字符串分配给 x
和 y
,就像您编写的一样:
x,y = "ab"
碰巧,这是一个有效的拆包。左边是两个变量,右边是一个包含两项的容器。 x
变为 “a”
,y
变为 “b”
。
如果 test
更长或更短,第一个循环也会因“需要多于 N 个值才能解包”或“太多值无法解包”而崩溃。
Why is the string unpacked in 1 scenario but not unpacked in the other?
第二个循环直接遍历字符串 "ab"
。当您迭代一个字符串时,它会将字符串分解为单字符字符串。第一次迭代是 "a"
,第二次是 "b"
。在第一次迭代中,它尝试做:
x,y = "a"
此赋值失败并显示“需要超过 1 个值才能解包”,因为左侧有两个变量而右侧只有一个字符。
关于python - 为什么 "in"适用于键而不适用于字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596921/