首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python数据结构建议

python数据结构建议
EN

Stack Overflow用户
提问于 2013-04-04 00:25:25
回答 1查看 136关注 0票数 0

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

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

  • 我应该能够检索特定源id的所有键和值。
  • 给定一个键,无论源id如何,我都应该能够找到与它相关的所有值。

我想要一个或多个空间高效的数据结构来实现这一点。我最初想保留两个映射:一个用于源id和键,另一个用于键和值。但是在这里,我失去了源id,而不是值映射。

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

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-04 00:47:39

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

请注意,这只会使指向实际数据的指针数量增加一倍;如果值很大,则内存使用量将大大减少一倍。但是,如果这是一个问题,并且您不介意将源id设置为键值查找要慢得多,那么您只能存储从键到(源,值)对的字典。然后,您可以通过以下方法获得给定密钥的所有值

代码语言:javascript
运行
复制
vals_for_key = [val for source, val in the_dict[key]]

和来自给定源的键值对

代码语言:javascript
运行
复制
keyvals_for_source = [(key, val)
                      for key, items in the_dict.iteritems()
                      for src, val in items
                      if src == source]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15800554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档