TypeError:不可用类型:'list'

时间:2013-06-18 15:34:10

标签: python

我遇到以下错误,下面的代码,下面是我正在尝试做的,如何在不改变原始目标的情况下修改代码......

  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()
    
  3. 输出: -

        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'
    

2 个答案:

答案 0 :(得分:5)

此表达式中的变量v

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

是包含剩余值的列表。您不能使用列表来索引字典,所以:

del dic[v]

会失败。看一下代码逻辑,你可能还是想这样做:

for value in v:
   if ....
       del dic[value]

答案 1 :(得分:3)

您正尝试使用列表作为键来索引字典。将del dic[v]错误中的行替换为del dic[value] - 假设这就是您的意思。