Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的映射函数抛出错误以解压缩值_Python_Python 2.7_Dictionary_List Comprehension - Fatal编程技术网

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()
-ing
punctDict
的键,因此不应期望在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)