【问题标题】:python data structure suggestionpython数据结构建议
【发布时间】:2013-03-25 21:33:53
【问题描述】:

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

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

  • 我应该能够检索特定源 ID 的所有键和值
  • 给定一个键,我应该能够找出与其关联的所有值,而与源 ID 无关。

我想要一个或多个节省空间的数据结构来实现这一点。我最初想保留 2 个映射:一个用于源 id 与键,另一个用于键与值。但是在这里我丢失了源 ID 到值映射。

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

有什么建议吗?

【问题讨论】:

    标签: python data-structures


    【解决方案1】:

    您可以稍微修改您的想法:保留一个字典将源与(键,值)对关联,另一个将键与值集相关联。这应该可以快速构建/更新(添加一个条目需要两次 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]
    

    【讨论】:

    • 谢谢。这会起作用,但这似乎是内存的公平增加。对我来说它看起来效率低下的原因是我们保留了两次几乎相同的信息,即键/值对
    • @user2121826 如果这是一个问题,请查看我的编辑以获得更节省内存的方式。
    • 这似乎好多了..让我试试这个。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2013-09-26
    • 1970-01-01
    • 2012-01-06
    相关资源
    最近更新 更多