2016-02-04 92 views
-1

我從一個文件中,以便創建一個嵌套的字典。例如,這裏是從這個代碼的輸出是這樣的:追加一個嵌套的字典值以相同的密鑰

d = {'key1': {'153908482': 'ctaggaacca'}, 'key2': {'115057116': 'gtaattctga'}, 'key3': {'133381371': 'ctgaaaagat'} 

字典應該是這個樣子:

d = {'key1': {'153908482': 'ctaggaacca', '143543': 'atccgatcgg'}, 'key2': {'115057116': 'gtaattctga', '12321333': 'accccgta'}, 'key3': {'133381371': 'ctgaaaagat'} 

我失去了在創造我的字典裏的一些信息。任何幫助將不勝感激。

+0

...你的文件是怎麼樣的? – timgeb

回答

1

問題是您正在將item分配給與字典不同的鍵。

item = d.get(row["value"], dict()) <-- you never assign to row["value"] so 
             this always returns an empty dict 
item[row["value"]] = row["need"] 
d[row["item"]] = item    <-- since you didn't get the existing 
             row["item"], you keep overwriting 
             them 

我返工你的腳本了一點,所以它是可運行的測試數據,但唯一真正的變化是從正確的密鑰

import csv 
from cStringIO import StringIO 

f = StringIO("""item value need 
key1 153908482 ctaggaacca 
key2 115057116 gtaattctga 
key3 133381371 ctgaaaagat 
key1 143543 atccgatcgg 
key2 212321333 accccgta 
""") 

d = {} 
#with open("file.txt", 'r') as f: 

data = csv.DictReader(f, delimiter="\t") 
for row in data: 
# item = d.get(row["value"], dict()) 
    item = d.get(row["item"], dict()) 
    item[row["value"]] = row["need"] 
    d[row["item"]] = item 

print d 

抓取數據而這裏的使用defaultdict它創建內部替換實施方式字典爲你

import collections 
d = collections.defaultdict(dict) 
data = csv.DictReader(f, delimiter="\t") 
for row in data: 
    d[row["item"]][row["value"]] = row["need"] 
print d 
+0

非常感謝你:) – cosmictypist

相關問題