2013-06-18 2 views
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 

ответ

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:]) 
Смежные вопросы