2016-11-05 57 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将工作。