1

重新发布更多细节..

我在下面的代码中遇到了以下错误,基本上下面是我想要做的,如果只有一个值,下面的代码可以正常工作......如果值更多,我会收到错误“太多的值无法解压“,我怎样才能修改我的代码而不改变原来的目标......

  1. 如果任何值是没有值的键,则从输入中删除该行
  2. 如果任何值是具有值的键,则对于每个值(即键)递归检查其值,直到没有值并删除重复行...示例输入和输出如下所示:

    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
4

1 回答 1

0

split返回一个列表。所以如果有两个以上的元素,spl你会得到一个ValueError.

例子:

>>> a = [1,2]
>>> b,c = a
>>> b
1
>>> c
2
>>> a = [1,2,3]
>>> b,c = a

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
  b,c = a
ValueError: too many values to unpack

所以你的代码应该是这样的:

key = spl[0]
v = set(spl[1:])
于 2013-06-18T06:46:59.243 回答