def main(data):
data = data.replace("n", " ")
data = data.lstrip("{ <% list")
data = data.strip(' %>}').strip().strip(';')
data = data.split(" <% list")
dictionary = {}
for line in data:
values, key = line.split("=:")
values = values.strip()
values = values.lstrip("(")
values = values.rstrip(")")
values = values.split(";")
values = list(map(lambda x: x.strip(), values))
key = key.strip()
dictionary[key] = values
return dictionary
print(main("{ <% list(cema_56; ator_218 ; lara_164 ; ator_370 )=: arenar; %> <% list( reer ;ina ; lebebi_345 ) =: usis_936; %> <% list(atan_207 ; enen)=: gelain_16; %><% list(ceonri_770; atso_148 ; eredre_533 )=: lace; %>}"))
----> 8 values, key = line.split("=:")
9 values = values.strip()
10 values = values.lstrip("(")
ValueError: too many values to unpack (expected 2)
从python文档
str.split()返回一个列表,并且您试图使用两个参数解包该列表,当列表有两个元素时它将工作,但当列表更小或更大时它将不起作用。
例如
x, y = [1] # wont work
x, y = [1, 2, 3] # wont work
你试过调试它吗?
print(line)
print(line.split("=:"))
values, key = line.split("=:")
你会发现并不是每一行都包含一个=:
,所以line.split
并不像你的代码要求的那样有两个结果。
你可以加上:
for line in data:
parts = line.split("=:")
if len(parts)!=2: continue
values, key = parts
values, key = line.split("=:")
从错误中可以相当清楚地看出,line.split("=:")
分裂成一个包含两个以上项目的列表,因此解包失败。但是,您可以强制str.split
只拆分一次。
values, key = line.split("=:", 1)