Python 为什么值错误:需要超过1个值才能解包

Python 为什么值错误:需要超过1个值才能解包,python,Python,我知道其他人也问过这个错误,但我不确定为什么我总是在这段代码中遇到这个错误。 我正在编写一个代码来打开并读取一个文本文件,然后用一个新的字母替换其中的每个字母。字母及其替换在我的字典“替换”中指定 这是我现在的代码: def decode(text): replacements={'a':'L','b':'A','c':'O','d':'Z','e':'M','f':'V','g':'R','h':'B','i':'U','j':'S','k':'Q','l':'K','m':'Y','

我知道其他人也问过这个错误,但我不确定为什么我总是在这段代码中遇到这个错误。 我正在编写一个代码来打开并读取一个文本文件,然后用一个新的字母替换其中的每个字母。字母及其替换在我的字典“替换”中指定

这是我现在的代码:

def decode(text):
    replacements={'a':'L','b':'A','c':'O','d':'Z','e':'M','f':'V','g':'R','h':'B','i':'U','j':'S','k':'Q','l':'K','m':'Y','n':'J','o':'W','p':'H','q':'E','r':'X','s':'T','t':'P','u':'F','v':'I','w':'G','x':'C','y':'D','z':'N'}
    infile=open(text).read()
    outfile=open("output.txt",'w')
    for letter in infile:
        for old,new in replacements:
            newtext=infile.replace(old,new)
            outfile.write(newtext)
    infile.close()
当我运行代码时,错误消息出现在“for old,new in replacements”行中,并告诉我需要超过1个值才能解包。我对编程很陌生。。有人能解释一下我为什么会犯这个错误吗

 for old,new in replacements:
我会把钥匙放在录音机里

 for old,new in replacements.iteritems():
将迭代dict中的键和值

我会把钥匙放在录音机里

 for old,new in replacements.iteritems():

将迭代dict中的键和值

我认为Jakob的答案解决了问题,但我想重新排列一下代码

def decode(text):
    replacements={'a':'L','b':'A','c':'O','d':'Z','e':'M','f':'V','g':'R','h':'B','i':'U','j':'S','k':'Q','l':'K','m':'Y','n':'J','o':'W','p':'H','q':'E','r':'X','s':'T','t':'P','u':'F','v':'I','w':'G','x':'C','y':'D','z':'N'}
    with open(text, 'r') as infile:
        instr = infile.read()
        for old,new in replacements.iteritems():
            instr = instr.replace(old, new)    
        with open("output.txt", 'w') as outfile:
            outfile.write(instr)
  • 进行替换并不需要遍历所有字母。它将查找并转换所有匹配项

  • 打开时使用
    更容易,因为它会自动处理
    关闭


  • 希望这些建议能帮助您学习Python。

    我认为Jakob的回答解决了问题,但我想重新安排一下代码

    def decode(text):
        replacements={'a':'L','b':'A','c':'O','d':'Z','e':'M','f':'V','g':'R','h':'B','i':'U','j':'S','k':'Q','l':'K','m':'Y','n':'J','o':'W','p':'H','q':'E','r':'X','s':'T','t':'P','u':'F','v':'I','w':'G','x':'C','y':'D','z':'N'}
        with open(text, 'r') as infile:
            instr = infile.read()
            for old,new in replacements.iteritems():
                instr = instr.replace(old, new)    
            with open("output.txt", 'w') as outfile:
                outfile.write(instr)
    
  • 进行替换并不需要遍历所有字母。它将查找并转换所有匹配项

  • 打开时使用
    更容易,因为它会自动处理
    关闭


  • 希望这些建议能帮助您学习Python。

    在您的实际代码中,什么是
    替换?它看起来像半本字典/半套。你能编辑这个问题,使它完全符合你的代码吗?对不起,我试图节省时间,而不是把它全部打印出来。我改变了它在你的真实代码中什么是替换?它看起来像半本字典/半套。你能编辑这个问题,使它完全符合你的代码吗?对不起,我试图节省时间,而不是把它全部打印出来。我变了it@Patrick不,那没什么区别。新的错误在其他地方。@user3074142我想新的错误是您假定
    infle
    file
    对象,但您已经通过
    .read()
    @user3074142将其转换为
    str
    ,这太奇怪了!你目前的错误是什么?修改后的代码在我的机器上运行良好。可能OP使用的是python3,因此他应该使用
    items()
    而不是
    iteritems()
    。然而,如果没有对错误的完整追溯,这只是一个猜测。顺便说一句:
    items()
    也可以在python2中工作,因此是一种更通用的解决方案,尽管在python2中效率较低。因为这个问题没有指定一个版本,所以我会使用最通用的解决方案,并提到
    iteritems()
    作为python2的更有效的解决方案。@Patrick不,这不会有什么区别。新的错误在其他地方。@user3074142我想新的错误是您假定
    infle
    file
    对象,但您已经通过
    .read()
    @user3074142将其转换为
    str
    ,这太奇怪了!你目前的错误是什么?修改后的代码在我的机器上运行良好。可能OP使用的是python3,因此他应该使用
    items()
    而不是
    iteritems()
    。然而,如果没有对错误的完整追溯,这只是一个猜测。顺便说一句:
    items()
    也可以在python2中工作,因此是一种更通用的解决方案,尽管在python2中效率较低。由于这个问题没有指定一个版本,我将使用最通用的解决方案,并提到
    iteritems()
    作为python2的更有效的解决方案。