python中的映射函数抛出错误以解压缩值
我试图运行以下速度的代码python中的映射函数抛出错误以解压缩值,python,python-2.7,dictionary,list-comprehension,Python,Python 2.7,Dictionary,List Comprehension,我试图运行以下速度的代码 punctDict = {'(':' ( ',')':' ) ','\t':'','\n':''} for keys,value in map(re.escape, punctDict.keys( )): print(keys,value) 它工作正常,给了我一个预期的输出 但是如果我尝试使用punctDict={'(':'(','):'),'t':'','n':'} 上面的for循环抛出一个异常,如下所示 ValueError: not enough v
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()
-ingpunctDict
的键,因此不应期望在for循环中同时获得键和值
您在此处运行的keys,value
实际上并没有访问punctDict
的键和值,而是仅转义键并尝试拆分字符串(并且成功,因为字符串只有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
第一部分,第二部分='x'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
第一部分,第二部分='x'
ValueError:需要超过1个值才能解包
即使这样:
>>> firstPart, secondPart = 'xyz'
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
firstPart, secondPart = 'xyz'
ValueError: too many values to unpack
第一部分,第二部分='xyz'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
第一部分,第二部分='xyz'
ValueError:要解压缩的值太多
输出一个迭代器,该迭代器无法解包为键和值元组
对于四处走动,您可以使用映射字典键来转义它
以下是一个示例:
map()函数输出一个迭代器,该迭代器不能解包为键和值元组。-通常是的,但OP的第一个输入是解包对迭代器中的值起作用的一个示例。这取决于迭代器输出的内容:)
import re
punctDict = {
'(': ' ( ',
')':' ) ',
'\t':'',
'\n':''
}
escaped_punct_dict = { re.escape(key) : value for (key,value) in punctDict.items() }
for keys, value in escaped_punct_dict.items():
print(keys,value)