我想将时间戳t
和标识符映射id
到对象的某个状态。我可以通过映射一个元组(t,id)
->来做到这一点state_of_id_in_t
。我可以使用这个映射来访问一个特定的(t,id)
组合。
但是,有时我想知道t
特定id
(即)的所有状态(具有匹配的时间戳),有时我想知道特定时间戳(即)的id -> a set of (t, state_of_id_in_t)
所有状态(具有匹配的标识符)。问题是我不能将所有这些都放在一个大矩阵中并根据我想要的进行线性搜索。我拥有状态的元组数量非常大(1m +)并且非常稀疏(一些时间戳有很多状态,其他没有等等)。我怎样才能制作这样一个可以处理通过部分键访问其内容的字典?id
t
t -> a set of (id, state_of_id_in_t)
(t,id)
我创建了两个不同的字典dict_by_time
an dict_by_id
,它们是字典的字典。dict_by_time
将时间戳映射t
到 id 的字典,每个 id 都指向一个状态。类似地,dict_by_id
将一个 id 映射到一个时间戳字典,每个时间戳都指向一个状态。这样我就可以访问我喜欢的一个状态或一组状态。请注意,两个 dicts ( dict_by_time
an dict_by_id
) 的“叶子”都指向相同的对象,所以这只是我访问不同状态的方式,但状态本身是相同的 python 对象。
dict_by_time = {'t_1': {'id_1': 'some_state_object_1',
'id_2': 'some_state_object_2'},
't_2': {'id_1': 'some_state_object_3',
'id_2': 'some_state_object_4'}
dict_by_id = {'id_1': {'t_1': 'some_state_object_1',
't_2': 'some_state_object_3'},
'id_2': {'t_1': 'some_state_object_2',
't_2': 'some_state_object_4'}
同样,请注意叶子在两个字典之间共享。
我不认为使用两个 dict 来做这件事很好,因为在添加新的时间戳或标识符时维护它们会导致双重工作,并且当我做错事时很容易导致不一致。有没有更好的方法来解决这个问题?复杂性非常重要,这就是为什么我不能只进行手动搜索而需要使用某种 HashMap 魔法。