[英]Appending a nested dictionary for values with same key
我已經從文件創建了一個嵌套字典,如下所示:
import csv
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[row["value"]] = row["need"]
d[row["item"]] = item
print d
但是,每個項目應有多個條目。 例如,此代碼的輸出如下所示:
d = {'key1': {'153908482': 'ctaggaacca'}, 'key2': {'115057116': 'gtaattctga'}, 'key3': {'133381371': 'ctgaaaagat'}
字典應該看起來像這樣:
d = {'key1': {'153908482': 'ctaggaacca', '143543': 'atccgatcgg'}, 'key2': {'115057116': 'gtaattctga', '12321333': 'accccgta'}, 'key3': {'133381371': 'ctgaaaagat'}
我在創建字典時丟失了一些信息。 任何幫助將不勝感激。
問題在於您正在將item
分配給與從dict獲得的鍵不同的鍵。
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
的替代實現,它為您創建內部dict
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.