0

以下のコードで次のエラーが発生しています。基本的に以下は私がやろうとしていることです。元の目標を変更せずにコードを変更するにはどうすればよいですか...

  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[0], spl[1:]        
                for value in v:
                    if value in dic and dic[value] == [""]:
                        del dic[v]
                for k1,v1 in dic.iteritems():
                    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 29, in <module>
    main()
  File "tesst.py", line 21, in main
    del dic[v]
  File "/usr/lib/python2.7/collections.py", line 67, in __delitem__
    dict_delitem(self, key)
TypeError: unhashable type: 'list'
4

2 に答える 2

5

この式の変数v:

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

残りの値のリストです。リストを使用して辞書のインデックスを作成することはできないため、次のようになります。

del dic[v]

失敗します。コード ロジックを見ると、とにかくこれを実行したい場合があります。

for value in v:
   if ....
       del dic[value]
于 2013-06-18T15:39:18.013 に答える