【问题标题】:Efficient way of retreiving index of dictionary entry by key in Python在Python中按键检索字典条目索引的有效方法
【发布时间】:2022-01-25 03:05:33
【问题描述】:

据我了解,Python 中的字典是从 Python 3.7 开始排序的。给定一个包含 N 个条目的字典,我应该能够为每个键关联一个从 0 到 N-1 的索引。我的问题是,给定一个键,有没有办法以有效的方式检索这个索引?似乎应该有一种比检索键列表和搜索感兴趣的特定键更有效的方法。

【问题讨论】:

  • 为什么需要这样做?字典是通过键而不是索引访问的。 3.7 中的变化是保证正常的 dicts 保持插入顺序,但据我所知,没有新工具添加到 determine 该顺序。您可能需要考虑改用OrderedDict
  • @MattDMo 的用例是我有一个项目集合,可以通过与它们关联的键最方便地访问这些项目。但是,我还想构建与这些项目相关联的向量/矩阵,其中每个基本元素对应于这些项目中的每一个。因此,为这些项目中的每一项设置一个 0 到 N-1 的索引似乎很自然。我不确定您对我的问题的这种有限描述可以提供多少建议,但如果有另一种听起来更适合此的数据结构,我会很感激为我指明正确的方向。
  • 您是否对字典进行了很多更改,尤其是从中删除项目?
  • @KellyBundy 不,字典一旦建立起来就是静态的。
  • 然后构建第二个字典,将键映射到索引。

标签: python python-3.x dictionary


【解决方案1】:

其中一种方法是list(dict_name.keys()).index(key_name)。另一种方法是使用operator.indexOf。我不确定你为什么首先需要键的索引,因为从字典中获取值已经是 O(1) 或常数时间。

【讨论】:

  • 这不是唯一的方法(operator.indexOf 可能更有效)。
  • 我计时了,operator.indexOflist(dict_name.keys()).index(key_name) 的速度差不多。你是对的,但这不是唯一的方法。
  • 你能包含/分享你的计时码吗?
  • 我刚刚制作了一本字典d = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "z": 26},并使用终端中的时间为每个函数定时查找字母“z”的索引。两者平均耗时约 0.026 秒。使用更长的字典可能会更好,但我真的不知道。您可以尝试使用更长的字典,看看是否有区别。
  • 不可能花费 0.026 秒。它比那快了大约 100000 倍。现在我自己试过了,时间是424 ns for yours and 232 ns for indexOf
猜你喜欢
  • 2015-04-02
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多