2016-02-29 112 views
0

我試圖讀取格式爲這樣嵌套一個默認的字典中的默認詞典

Number,Letter,Color, 
1,a,blue, 
1,b,green, 
1,c,yellow, 

一個CSV文件,並得到了嵌套的字典這樣

{ 
"1":[ 
    "Letter":["a","b","c"], 
    "Color":["blue","green","yellow"] 
    ] 
} 

我能得到的數字,其從csv相關的行,但只要我嘗試和嵌套,我得到AttributeError:'collections.defaultdict'對象沒有屬性'追加',我認爲我大多是關閉到正確的開始

result = co.defaultdict(lambda: co.defaultdict(list)) 
subresult = co.defaultdict(list) 

with open(os.path.join(inputdir,tablelist[i])) as f: 

    csv_reader = csv.reader(f) 
    csv_headings = next(csv_reader) 
    read = csv.DictReader(f, fieldnames=csv_headings) 

    for line in read: 
     subresult = {} 
     for j in range(1,len(csv_headings)): 
      #result[line[csv_headings[0]]].append(line[csv_headings[j]]) 
      result[line[csv_headings[0]]].append(subresult[csv_headings[j]].append(line[csv_headings[j]]))  
+0

的字典對象沒有'append'方法,而不是使用'update'方法 – efirvida

+0

那麼,什麼是**子結果[csv_headings [J] **的類型?你沒給我們一個重複的例子。當我嘗試這與我的CSV文件,我在J = 1一鍵搞定的錯誤,這意味着生成的對象,**無**必須** **追加方法。如果這應該是一本字典,那麼你還在吮吸,因爲** **追加是不是一本字典的方法。 – Prune

+0

子結果應符合相應的鍵 –

回答

2

在您的文件擺脫標題行的,這作品:

from collections import defaultdict 
d = defaultdict(lambda : defaultdict(list)) 
with open('myFile.txt', 'r') as f: 
    for line in f: 
     r = line.strip().split(",") 
     number, letter, color = r[:3] 
     d[number]['Letter'].append(letter) 
     d[number]['Color'].append(color) 

print d 

輸出

defaultdict(<function <lambda> at 0x7f3d99f49b90>, {'1': defaultdict(<type 'list'>, 
{'Color': ['blue', 'green', 'yellow'], 'Letter': ['a', 'b', 'c']})}) 
+0

那錢感謝名單一本字典! –

2

的字典對象沒有追加方法改爲使用更新方法

類似:

result[line[csv_headings[0]]].update(subresult[csv_headings[j]].append(line[csv_headings[j]])) 

例如:

In [1]: a ={'a':1} 

In [2]: a.append({'b':2}) 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-4-02c9b6cd9396> in <module>() 
----> 1 a.append({'b':2}) 

AttributeError: 'dict' object has no attribute 'append' 

In [3]: a.update({'b':2}) 

In [3]: a 
Out[3]: {'a': 1, 'b': 2} 
+0

我使用的是defaultdict裏面確實有append方法,如果我拿出嵌套字典它的工作原理 –