[英]How can I create a dictionary within another dictionary with count capability?
我有一組文件,其中我要提取特殊名稱並計算每個文件中的名稱。 我希望我的最終結果是下面的兩個字典:
{ID1:{sam:1,maj:5, tif:7, paul:1},ID2={maj=4,bib=5},..}
我為此編寫了以下代碼:
val={}
for m in result:
f= open(path+m[1]+'.txt', 'r')
for line in f:
search_str= "my_name"
if line.startswith(search_str):
linename = line.split(' ',2)[1].strip()
key= get_name_part(linename)
val[key] = val.get(key, 0) + 1
maindict[m[0]]=val
其中m [0]是'fileID'(我的大詞典的關鍵字),而m [1] =是必須打開的文件。
運行代碼時,我的內部字典始終是相同的,但是只有外部字典的鍵不同。
{ID1:{sam:1,maj:5, tif:7, paul:1},ID2={sam:1,maj:5, tif:7, paul:1},..}
有人知道如何解決嗎?
您永遠不會創建新的 val
字典,而只是不斷更新循環之前創建的val
字典。 為每個ID
創建一個新的ID
:
maindict = {}
for m in result:
val = maindict.setdefault(m[0], {})
f= open(path+m[1]+'.txt', 'r')
for line in f:
search_str= "my_name"
if line.startswith(search_str):
linename = line.split(' ',2)[1].strip()
key= get_name_part(linename)
val[key] = val.get(key, 0) + 1
您可以使用collections.Counter
和collections.defaultdict
來簡化代碼:
from collections import Counter, defaultdict
import os
maindict = defaultdict(Counter)
for m in result:
counts = maindict[m[0]]
with open(os.path.join(path, m[1] + '.txt'), 'r') as f:
search_str = "my_name"
counts.update(get_name_part(line.split(None, 2)[1])
for line in f if line.startswith(search_str))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.