【问题标题】:How to know the position of items in a Python ordered dictionary如何知道 Python 有序字典中项目的位置
【发布时间】:2011-10-17 09:15:33
【问题描述】:

我们能知道项目在 Python 有序字典中的位置吗?

例如:

如果我有字典:

// Ordered_dict is OrderedDictionary

Ordered_dict = {"fruit": "banana", "drinks": "water", "animal": "cat"}

现在我怎么知道cat 属于哪个位置? 有没有可能得到这样的答案:

position (Ordered_dict["animal"]) = 2 ? 或其他方式?

【问题讨论】:

  • 你的字典不是一个有序的字典——它是一个无序的普通 Python 字典。
  • 仅仅因为你称它为有序字典并不能使它成为一个!
  • 我知道这是一个老问题了,但是前 2 位评论者想说的是,如果你想要你的字典,你需要在 collections 模块中使用一个名为 OrderedDict 的类维护秩序。遵循 python 命名约定也很好,其中类在 CamelCase 中,变量在 snake_case 中,所以你的变量应该是ordered_dict(即第一个字符没有大写)。

标签: python ordereddictionary


【解决方案1】:

您可能会获得带有keys 属性的键列表:

In [20]: d=OrderedDict((("fruit", "banana"), ("drinks", 'water'), ("animal", "cat")))

In [21]: d.keys().index('animal')
Out[21]: 2

不过,使用iterkeys() 可以获得更好的性能。

对于那些使用 Python 3 的人:

>>> list(d.keys()).index('animal')
2

【讨论】:

  • list(d.keys()).index('animal') 适用于所有使用 Python3 的人。
  • 似乎简单地使用list(d).index('animal') 也适用于 Python 3,除非我遗漏了什么。
【解决方案2】:

首先考虑您需要阅读文档。如果您打开 Python 教程,然后尝试查找有关 OrderedDict 的信息,您将看到以下内容:

class collections.OrderedDict([items]) - 返回一个字典的实例 子类,支持通常的 dict 方法。 OrderedDict 是一个字典 记住第一次插入密钥的顺序。如果一个新条目 覆盖现有条目,保留原始插入位置 不变。删除条目并重新插入会将其移动到 结束。

2.7 版中的新功能。

因此,如果您使用的是有序字典并且您不打算删除键 - 那么“动物”将始终位于您添加的位置 - 例如索引 2。

还可以简单地使用获取“猫”的索引:

from collections import OrderedDict
d = OrderedDict((("fruit", "banana"), ("drinks", "water"), ("animal", "cat")))
d.keys()
>>> ['fruit', 'drinks', 'animal']
d.values()
>>> ['banana', 'water', 'cat']
# So
d.values().index('cat')
>>> 2

【讨论】:

    【解决方案3】:

    对于 Python3:tuple(d).index('animal')

    这与上面 Marein 的答案几乎相同,但使用不可变元组而不是可变列表。所以它应该运行得快一点(在我的快速健全性检查中快了约 12%)。

    【讨论】:

    • 请注意,这也适用于 Python 2(tuple(d) 只是迭代字典的键并生成一个元组)
    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2012-08-20
    • 2015-10-21
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多