我遇到以下错误,下面的代码,下面是我正在尝试做的,如何在不改变原始目标的情况下修改代码......
如果任何值是带有值的键,则对于每个值(这是键)递归检查其值,直到没有并删除重复的行...示例输入和输出如下所示:
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'
答案 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]
- 假设这就是您的意思。