ValueError:字典中没有足够的值来解压缩(预期为 2,得到 1)

ValueError: not enough values to unpack (expected 2, got 1) in dictionary

提问人:Inby 提问时间:1/18/2023 更新时间:1/19/2023 访问量:318

问:

我试图做我所知道的一切,但我无法解决这个问题

import re

Alice = {}
nombre = input("Cuál es tu nombre: ")
while True:
    mensaje = input(nombre+": ").lower()
    new_string = re.sub(r"[^a-zA-Z0-9áéíóú ]","",mensaje)
    if new_string in Alice:
        print("Alice:",Alice[new_string])
    else:
        print("Alice: No se que decir a esto, ¡dime que debería decir sobre esto!")
        archivo = open("Alice.txt","a")
        new_answer = input(nombre+": ")
        archivo.write(new_string+" - "+new_answer+" , ")
        archivo.close()
        archivo = open("Alice.txt","r")
        archivolocal = archivo.read()
        print(archivolocal)
        Alice = dict((a.strip(), (b.strip()))  
                      for a, b in (element.split('-')  
                                  for element in archivolocal.split(', ')))
        print(Alice)

我想转换这个存档 TXT:

hola - Hola! , como estás - ¿Bien, y tu? ,

到字典 但它告诉我,我不知道如何解决它,因为我想做一个程序,在存档中写出问题是什么,以后如果archive.txt没有答案,你把答案保存在archive.txt中,也保存在爱丽丝的字典中

我尝试做我所知道的关于 Python 的一切,但我知道的并不多,我尝试更改变量的名称,尝试一些东西,将 str 放在 () 之前,什么都没有,结果相同。

ValueError: not enough values to unpack (expected 2, got 1)

python-3.x 字典 io 存档 错误

评论


答:

0赞 ljmc 1/19/2023 #1

让我们来看看你的理解:

  1. archivolocal.split(', ')['hola - Hola! ', 'como estás - ¿Bien', 'y tu? ', '']
  2. 对于每个,您将分别得到 、 和 。element.split('-')['hola ', ' Hola! ']['como estás ', ' ¿Bien']['y tu? ']['']

最后两个 s 仅包含一个值,并且无法根据需要解压缩为两个值。elementfor a, b in (element.split('-')

这就是使用如此简单的编组系统的问题。

但是,改进它很容易。您写入存档,因此您应该在调用中使用这些分隔符。new_string + " - " + new_answer + " , "split

您还需要过滤掉第一次拆分后的最后一个“”。

在这种情况下,我会重新评论您使用 for 循环而不是理解,因为它们会使内容更易于阅读。

archivolocal = "hola - Hola! , como estás - ¿Bien, y tu? , "
conversation = {}
for el in archivolocal.split(" , "):
    if el == "":  # could be `if not el` since empty strings are falsy
        continue
    k, v = el.split(" - ", maxsplit=2)  # maxsplit for safety
    conversation[k.strip()] = v.strip()

conversation包含

{'hola': 'Hola!', 'como estás': '¿Bien, y tu?'}