Python 递归地检查键的值

Python 递归地检查键的值,python,Python,我在下面的代码中遇到了以下错误,基本上下面就是我要做的,如果只有一个值,下面的代码可以正常工作。。。如果值更多,我会收到错误“太多值无法解包”,如何在不更改原始目标的情况下修改代码 如果任何值是没有值的键,请从输入中删除该行 如果任何值是带值的键,则对于每个值(即键),递归检查其值,直到没有值为止,并删除重复行…下面显示了一个示例输入和输出: KEY VALUES 353311 344670 332807 353314 338169 334478 334478 123456 34567

我在下面的代码中遇到了以下错误,基本上下面就是我要做的,如果只有一个值,下面的代码可以正常工作。。。如果值更多,我会收到错误“太多值无法解包”,如何在不更改原始目标的情况下修改代码

  • 如果任何值是没有值的键,请从输入中删除该行
  • 如果任何值是带值的键,则对于每个值(即键),递归检查其值,直到没有值为止,并删除重复行…下面显示了一个示例输入和输出:

    KEY    VALUES
    353311
    344670 
    332807 353314
    338169 334478
    334478 123456 34567
    123456 98670
    34567  11111  
    353314 353311
    348521 350166 350168 350169 350170 
    350166 348521
    350168 348521
    350169 348521
    350170 348521
    
    EXPECTED OUTPUT
    344670
    332807 353314 353311
    338169 334478 123456 34567 98670 11111
    348521 350166 350168 350169 350170  
    
  • 代码:-

    from collections import OrderedDict
    def main ():
        with open('gerrit_dependencylist.txt') as f:
            dic = OrderedDict()
            seen = set()
            for line in f:
                #print dic,line
                spl = line.split()
                print "SPL"
                print spl
                if len(spl) == 1:
                    key = spl[0]
                    v = ''
                else:
                    print "LINE"
                    print line
                    key, v = spl
                if v in dic and dic[v] == [""]:
                    del dic[v]
                for k1,v1 in dic.items():
                    if key in v1:
                        dic[k1].append(v)
                        break
                else:
                    dic[key] = [v]
    
    if __name__ == '__main__':
        main()
    
    输出:-

    LINE
    332807 353314
    
    LINE
    338169 334478
    
    LINE
    334478 123456 34567
    
    Traceback (most recent call last):
      File "tesst.py", line 28, in <module>
        main()
      File "tesst.py", line 18, in main
        key, v = spl
    ValueError: too many values to unpack
    
    行
    332807 353314
    线
    338169 334478
    线
    334478 123456 34567
    回溯(最近一次呼叫最后一次):
    文件“tesst.py”,第28行,在
    main()
    文件“tesst.py”,第18行,在main中
    键,v=spl
    ValueError:要解压缩的值太多
    
    行中有3项

    33447812345634567

    所以

    你想把它们分成两部分

    key, v
    
    也许你想要

    key = spl[0]
    v = spl[1:]
    
    你也可以把它写在一行上

    key, v = spl[0], spl[1:]
    

    @gnibber-如果我使用它..如果dic中的v和dic[v]=[“”]:TypeError:unhabable type:'list'@user2125827,我会得到一个错误,因为你不能仅仅询问字典是否包含特定的值<驾驶员信息中心(dic)中的代码>适用于钥匙。我想您的意思是迭代v以获得要查找的单个值。@user2125827对v中的值使用
    :如果值==所需:…
    @user2125827 gnibler已经解释了如何解决您当前的问题,如果您有其他问题,我建议您提出单独的后续问题。
    key, v = spl[0], spl[1:]