Проблема в том, что вы используете for keys,value
для распаковки строки, содержащей только один символ.Обратите внимание на разницу в выводе между этим:
>>> 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()
используете ключи вашего 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