获取值满足条件的字典中的所有项目

时间:2014-10-01 16:55:19

标签: python algorithm dictionary

我有一个未排序的字典,其中一个键的值是一个整数。

我希望得到值大于某个int k的所有键。

  • 方法1:我可以轻松地遍历dict并将每个值与int k进行比较。为O(n)
  • 方法2:我可以排序,但排序字典需要O(n log n)所以方法1更好。
  • 方法3:将字典转换成别的东西?如果是的话,到底是什么?这是值得的吗?

我很好奇这是否可以比O(n)更好。

1 个答案:

答案 0 :(得分:1)

首先,Python dicts是未排序的(它们是哈希表),所以当你谈论排序dict时,你真的在​​谈论不同的数据结构。

如果您只需要执行一次,那么O(n)就可以了,因为您需要检查每个n键。使用词典理解,你就完成了。

如果您需要反复执行此操作,则可能需要一些时间来转移到不同的数据结构。是否值得,取决于dict的大小,更改的频率,搜索需要的次数,每次搜索返回的密钥数等。更具体地说,我们需要更多信息。

最后但并非最不重要的是,根据具体情况,从O(n)转移到O(log n)并不总是一场胜利。例如,如果n足够小,线性搜索可能会变得最快。一个好的总体策略是采用最简单的实现并对代码进行分析,以确定是否可以从优化代码中获得任何东西。