python数据结构建议

时间:2013-04-04 00:25:25

标签: python data-structures

我有一些来自不同来源的输入。输入是键值对形式。键的类型为'a.b.c'。来自不同来源的密钥可以是相同的,在这种情况下,我必须做一组所有值。

我需要对数据结构做些什么:

  • 我应该能够检索特定源ID的所有键和值
  • 给定一个密钥,无论源ID如何,我都应该能够找到与之关联的所有值。

我想要一个或多个节省空间的数据结构来实现这一点。我原本想要保留2张地图:一张用于源ID和键,另一张用于键值和值。但在这里,我将丢失源ID到值映射。

速度/空间要求: 获取每个键值列表的速度很重要;维护这些数据结构所需的内存也是如此。构建此数据结构所需的时间和源ID到键/值检索速度并不重要。

有什么建议吗?

1 个答案:

答案 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]
相关问题