簡體   English   中英

如何在具有計數功能的其他詞典中創建詞典?

[英]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.Countercollections.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM