python - 为什么 "in"适用于键而不适用于字符串?

标签 python string dictionary iterable-unpacking

今天我在 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恰好是两个字符长的非常特殊的巧合,所以可以解包成两个变量 xy

要迭代一个字典的键和值,写:

for k,v in d.items():
    ...

如果您只想要 key ,您可以这样做:

for k in d:
    ...

详细地说,当您遍历一个字典时,它会遍历键。

for x,y in test_dict

字典只有一个键,"ab"。因此,在第一次也是唯一一次迭代中,它将该字符串分配给 xy,就像您编写的一样:

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/

相关文章:

c++ - 正确读取文本文件

python - 使用带通配符的键创建 Python 字典

python - 为什么我得到 None 值,并且为什么该数字仍在 Python 中打印?

java - token 和行处理Java

python - 语法错误: invalid syntax in python mysql login

numpy - 我应该使用 `from numpy import *` 将 numpy(或 pylab)用作 python 环境吗?

python - 计算数据框中确切小时的间隔平均值

arrays - 在 MATLAB 中将包含星号的字符数组转换为数字

Python嵌套字典理解

Python 多处理错误 : AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>"