str没有追加属性错误

时间:2012-12-11 16:17:30

标签: python loops error-handling

我的文件类似于:

1 a  
1 a  
1 b  
3 s  
3 p  
3 s  
3 y  
5 b  
...  

我正在将它变成一个字典,其中键是第0列,值是第1列。我正在使用循环,所以当我再次看到时,我追加新值如果新值不在现有密钥中,因此我的字典看起来像:

test_dict = {'1':[1,b],'3':[s,p,y] ...}

我的代码如下:

test_dict = {}  
with open('file.txt') as f:  
        for line in f:  
                column = line.split()  
                if column[0] not in test_dict:  
                        test_dict[column[0]] = column[3]  
                elif column[3] not in test_dict[column[0]]:  
                        test_dict[column[0]].append(column[3])  
                else:  
                        break  

我在追加行上得到str has no attribute append error。我知道这些列被视为一个字符串,我怎么能在我的代码中纠正这个?

3 个答案:

答案 0 :(得分:3)

您无法附加到字符串。您要么+=要么要test_dict列出要素。您也可以将dict值设为set并删除所有重复检查,但您的列表将不再按第一次出现顺序排序。

from collections import defaultdict

test_dict = defaultdict(set)
with open('file.txt') as f:
    for line in f:
        columns = line.split()
        test_dict[columns[0]].add(columns[3])

答案 1 :(得分:1)

column[3]是一个字符串,test_dict[column[0]]将是一个字符串。你的意思是把它列为一个清单吗?

test_dict[column[0]] = [column[3]]

答案 2 :(得分:0)

您还可以使用groupby获得类似的结果,然后使用set删除重复项

>>> from itertools import groupby
>>> from operator import itemgetter
>>> {k: list(set(e for _,e in v))
        for k,v in groupby((e.split() for e in foo),
               key = itemgetter(0))}
{'1': ['a', 'b'], '3': ['y', 'p', 's'], '5': ['b']}