35

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

例如:

如果我有字典:

// Ordered_dict is OrderedDictionary

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

现在我怎么知道cat属于哪个职位?是否有可能得到类似的答案:

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

4

3 回答 3

65

您可能会获得该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
于 2011-08-01T11:34:10.387 回答
6

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

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

于 2017-06-01T11:49:53.720 回答
3

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

class collections.OrderedDict([items]) - 返回一个 dict 子类的实例,支持常用的 dict 方法。OrderedDict 是一个 dict,它记住第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入会将其移至末尾。

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
于 2011-08-01T11:52:20.360 回答