簡體   English   中英

我如何追加到列表中,該列表是dict中的鍵值?

[英]how can I append to a list which is value of a key in dict?

我遇到一種情況,我正在解析文件並收集統計信息。 我想將這些統計信息存儲在具有最終值列表的嵌套字典中。 在處理文件時,我想擴展列表。

例如我的字典結構是這樣的

data_dict 
    { "aa1" :
         { 'aa' : []}
         { 'bb' : [] }
     "aa2" : 
         { 'ab' : []}
         { 'ba' : [] }
    }

現在,當我解析文件時,例如要將值附加到最后一個列表中,在第一次出現數據時,我的字典應該像這樣。

data_dict 
    { "aa1" :
         { 'aa' : ['a0']}
         { 'bb' : ['a1'] }
     "aa2" : 
         { 'ab' : ['b0']}
         { 'ba' : ['b1'] }
    }

在第二個這樣的事情

data_dict 
    { "aa1" :
         { 'aa' : ['a0', 'a01']}
         { 'bb' : ['a1', 'a11'] }
     "aa2" : 
         { 'ab' : ['b0', 'b01']}
         { 'ba' : ['b1', 'b11'] }
    }

另外,我沒有將dict鍵初始化為任何東西,也不在第一次匹配時創建鍵。 誰能建議我如何實現這一目標?

請注意,我正在使用自動生存來初始化我的data_dict,它最初不包含任何內容。

這是我要解析的樣本數據

DATETIME TYPE TAG  COUNT MEAN 1% 10% 20% 30% 40% 50% 60% 70% 80% 90% 99% 
20151109044056 LS_I aa8 57     80,493,122      8,931,000      8,937,000      8,944,000      8,974,000      9,073,000     21,262,000     28,419,000     35,794,000    148,920,000    316,408,000    447,902,000 
    20151109044056 LS_I aa0 6,893      9,008,024      8,862,000      8,913,000      8,941,000      8,964,000      8,984,000      9,006,000      9,028,000      9,049,000      9,071,000      9,102,000      9,170,000 
    20151109044056 LS_I aa1 6,062      9,018,094      8,867,000      8,913,000      8,938,000      8,961,000      8,983,000      9,003,000      9,025,000      9,048,000      9,071,000      9,103,000      9,175,000 
    20151109044056 LS_I aa2 2,776      9,030,621      8,929,000      8,967,000      8,987,000      8,999,000      9,012,000      9,024,000      9,037,000      9,050,000      9,065,000      9,087,000      9,161,000 
    20151109044056 LS_I aa3 1,074      9,028,744      8,925,000      8,970,000      8,988,000      9,002,000      9,016,000      9,026,000      9,039,000      9,051,000      9,067,000      9,089,000      9,138,000 
    20151109044056 LS_I aa4 6,060      9,003,651      8,874,000      8,935,000      8,958,000      8,976,000      8,991,000      9,005,000      9,019,000      9,033,000      9,049,000      9,071,000      9,121,000 
    20151109044056 LS_I aa5 5,453      9,003,993      8,874,000      8,936,000      8,959,000      8,976,000      8,991,000      9,004,000      9,018,000      9,032,000      9,048,000      9,071,000      9,126,000 
    20151109044056 LS_I aa6 16,384            328            111            165            190            208            227            253            301            362            434            551            997 
    20151109044056 LS_I aa7 16,384            316             58             65             70             76             87            137            308            395            512            702          1,562 

所以我的字典將第一個鍵作為Tag列,將第二個鍵作為%column之一,然后此鍵的值就是完整文件中該值的所有實例。

這是我的處理代碼,無法正常工作。

            while re.match("\d{14}\s.*", curr_line):

                lat_data = curr_line.split()
                tag = lat_data[header.index("TAG")]
                for item in range(len(header)):
                    col = header[item]

                    if '%' in col or\
                       "COUNT" in col or\
                       "MEAN" in col:
                        self.data_dict[tag][col].append(lat_data[item])
                curr_line = lat_file.next()

首先: has_key已過時(Py3中已棄用); 您可以in支票中直接使用。 其次,您嘗試使用has_key是荒謬的[tag][col]並不是沒有要索引的東西的合法語法(如果沒有索引/查找內容,它看起來像兩個背對背的單個元素list文字,這不是法律語法)。 該測試的解決方法是分別測試每個組件(由於您知道該值存在,因此可以追加每個組件):

if tag in self.data_dict and col in self.data_dict[tag]:
    self.data_dict[tag][col].append(whatever_you_want_to_append)

旁注:您幾乎永遠不會想要for i in range(len(something)): 這是來自C樣式for循環背景的症狀。 除了獲取值之外,您實際上並沒有將索引用於任何其他用途,因此請替換:

for item in range(len(header)):
    col = header[item]

與:

for col in header:

運行得更快,更慣用,等等。如果出於某種原因也需要索引,那么enumerate是:

for i, col in enumerate(header):

更新 :您使用更多信息更新了問題,因此您似乎需要並行迭代lat_data 在這種情況下,請執行以下操作:

for col, lat in zip(header, lat_data):
    ...

        if tag in self.data_dict and col in self.data_dict[tag]:
            self.data_dict[tag][col].append(lat)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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