我有一些来自不同来源的输入。输入是键值对形式。键的类型为'a.b.c'。来自不同来源的密钥可以是相同的,在这种情况下,我必须做一组所有值。
我需要对数据结构做些什么:
我想要一个或多个节省空间的数据结构来实现这一点。我原本想要保留2张地图:一张用于源ID和键,另一张用于键值和值。但在这里,我将丢失源ID到值映射。
速度/空间要求: 获取每个键值列表的速度很重要;维护这些数据结构所需的内存也是如此。构建此数据结构所需的时间和源ID到键/值检索速度并不重要。
有什么建议吗?
答案 0 :(得分:0)
您可以稍微修改一下您的想法:保留一个字典将源与(键,值)对关联,另一个关联键与值集关联。这应该是快速构建/更新(添加一个条目需要两个dict查找和一个列表/集插入),并且不需要太多的内存开销。然后,您想要的两个查找操作中的每一个只需要一个字典命中。
请注意,这只会使指向实际数据的指针数量增加一倍;如果值很大,那么内存使用量将远远小于两倍。但是,如果这是一个问题,并且您不介意使键值查找的源ID慢得多,那么您只能存储从键到(源,值)对的字典。然后,您可以通过
获取给定键的所有值vals_for_key = [val for source, val in the_dict[key]]
和来自给定来源的键值对
keyvals_for_source = [(key, val)
for key, items in the_dict.iteritems()
for src, val in items
if src == source]