2016-11-05 134 views
1

我正在接收來自不同聯繫人的雷達數據。每個聯繫人都有一個經緯度,方向,範圍和時間戳。並且每次碰到某個聯繫人時都會有ID'd,例如1,2,3等,這表示隨着時間的推移字典會顯示一個字典。因此,我的一個聯繫人的字典將如下所示:操作字典內的字典內容

{1:[data @ t1], 2:[data @ t2], 3:[data @ t3]} 

隨着時間的推移字典將填滿,直到...但不會有隻有一個聯繫人。會有幾個,也許很多。這表明詞典的詞典:

{'SSHornblower': {1:[data], 2:[data], 3:[data]}, 
'Lustania': {1:[], 2:[], 3:[]}, 
'Queen Mary': {1:[], 2:[], 3:[], 4:[]}} 

這是不可能事先知道我的雷達將有多少接觸發現,也許3也許300.我不能想出的名字提前對所有可能接觸和所有可能的字典的名稱。因此,我提出了這樣的想法,即一旦我在更大的字典中嵌入字典,我就可以清除它,並從新的聯繫人開始。但是當我在另一箇中嵌套一個之後,我會做一個清楚的事情,它將清除較大字典中的所有內容!有沒有辦法解決這個問題?

+1

目前爲止你有什麼代碼?你也可以格式化你的代碼/數據。這塊文字是一個眼睛。 – blacksite

+0

你需要O(1)字典的訪問時間嗎?如果沒有,您可以將聯繫人存儲在列表中。如果您需要一本字典,那麼您需要一個將保證唯一標識符(可能是整數 - 不要假定名稱是唯一的)分配給未知聯繫人的系統。 (另外,考慮使用列表或['collections.OrderedDict'](https://docs.python.org/3/library/collections.html#collections.OrderedDict)來存儲雷達「ping」,因爲明顯的使用一堆時間戳數據是按時間順序迭代它......並且可能會刪除比_n_秒更早的ping。) –

+1

不確定我瞭解您的問題。特別是,你爲什麼想要清理東西。當你遇到新的聯繫人時,你不能在主詞典中添加一個新條目嗎? – bli

回答

0

對於填充嵌套字典,defaultdict可能非常有用。

讓我們假設你有一個函數radar()返回三個值:

  1. CONTACT_NAME
  2. CONTACT_ID
  3. contact_data

那麼下面會做的工作:

from collections import defaultdict 

store = defaultdict(dict) 

while True: 
    contact_name, contact_id, contact_data = radar() 
    store[contact_name][contact_id] = contact_data 

所以,即使在store中還有一個新的contact_name尚未出現,defaultdict的魔力將確保在使用新密鑰訪問store時,空嵌套字典已經存在。因此store[new_contact_name][new_contact_id] = new_contact_data將工作。