2013-04-04 98 views
0

我有一些来自不同来源的输入。输入是键值对形式。键是'a.b.c'形式的。来自不同来源的键可以是相同的,在这种情况下,我必须做一组所有的值。python数据结构暗示

事情,我需要用数据结构做的事:

  • 我应该能够检索所有键和值特定源ID
  • 考虑的一个关键,我应该能够找出所有与它相关的值,而不考虑源ID。

我想要一个或多个空间高效的数据结构,我可以用它来实现这一点。我原本想保留2张地图:一张用于源ID和键值,另一张用于键值和值。但在这里,我正在失去源代码到值映射。

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

有什么建议吗?

回答

0

您可以稍微修改一下您的想法:保留一个将源与(键,值)对相关联的字典,以及另一个将值与一组值关联的字典。这应该是快速构建/更新(添加一个条目需要两个字典查找和列表/集插入),并且不需要太多的内存开销。然后,每个查找操作只需要一个单独的字典。

请注意,这只会使指向实际数据的指针数量增加一倍;如果这些值很大,那么内存使用量将会少于一倍。但是,如果这是个问题,并且您不介意将源代码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] 
+0

感谢获取给定键的所有值。这会起作用,但这似乎是公平增加的记忆。对我而言效率低下的原因是我们保留**几乎**相同的信息两次,即键/值对 – user2121826 2013-04-04 02:26:57

+0

@ user2121826如果这是一个问题,请参阅我的编辑以获得更有效的内存方式。 – Dougal 2013-04-04 02:38:41

+0

这似乎好多了..让我试试这个。谢谢! – user2121826 2013-04-04 03:36:08