2016-11-05 18 views
1

私はさまざまな連絡先のレーダーからデータを受信して​​います。各連絡先には、緯度、経度、方向、範囲、およびタイムスタンプがあります。連絡先にヒットするたびに1,2,3などのIDが割り当てられます。これは1つの連絡先に対して、時間の経過とともに辞書を示唆します。そのため、一つのコンタクトのための私の辞書には、次のようなものになります。辞書内の辞書の内容を操作する

{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は非常に便利です。

のは、次の3つの値を返す関数radar()持っていると仮定しましょう:contact_id

    1. CONTACT_NAMEを
    2. 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にまだ存在しない場合でも、新しい鍵でstoreにアクセスすると、defaultdictの魔法は空のネストされたdictがすでにそこにあることを確認します。したがって、store[new_contact_name][new_contact_id] = new_contact_dataが動作します。

  • 関連する問題