我正在尝试运行以下代码速度
punctDict = {'(':' ( ',')':' ) ','\t':'','\n':''}
for keys,value in map(re.escape, punctDict.keys( )):
print(keys,value)
它工作正常并给了我预期的输出
但是如果我尝试使用 punctDict = {'(':' ( ',')':' ) ','t':'','n':''}
上面的 for 循环抛出异常
ValueError: not enough values to unpack (expected 2, got 1)
最佳答案
问题在于您使用作为键,值
来解压一个仅包含一个字符的字符串。观察两者之间的输出差异:
>>> punctDict = {'(':' ( ',')':' ) ','\t':'','\n':''}
>>> map(re.escape, punctDict.keys())
['\\)', '\\(', '\\\t', '\\\n']
还有这个:
>>> punctDict = {'(':' ( ',')':' ) ','t':'','n':''}
>>> map(re.escape, punctDict.keys())
['\\)', '\\(', 't', 'n']
请注意,在第二个示例中,'t' 和 'n' 只是变成了 't' 和 'n',并且单字符字符串无法使用逗号表示法解包。由于您只是 re.escape()
-ing punctDict
的键,因此您不应期望在 for 循环中同时获取键和值。
您在此处运行的keys,value
实际上并未访问punctDict
的键和值re.escape()
-d,而只是转义键并尝试分割字符串(并且成功,因为字符串只有 2 个字符。
如果您比较以下内容,您会看到相同的行为:
>>> firstPart, secondPart = 'xy'
>>> firstPart
'x'
>>> secondPart
'y'
这样:
>>> firstPart, secondPart = 'x'
Traceback (most recent call last):
File "<pyshell#60>", line 1, in <module>
firstPart, secondPart = 'x'
ValueError: need more than 1 value to unpack
甚至这个:
>>> firstPart, secondPart = 'xyz'
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
firstPart, secondPart = 'xyz'
ValueError: too many values to unpack
关于python - python 中的映射函数在解包值时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204336/