如何知道Python有序字典中项的位置

时间:2011-08-01 11:28:33

标签: python ordereddictionary

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

例如:

如果我有字典:

// Ordered_dict is OrderedDictionary

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

现在我怎么知道cat属于哪个位置? 是否有可能得到如下答案:

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

3 个答案:

答案 0 :(得分:60)

您可能会获得一个包含keys属性的键列表:

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

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

虽然使用iterkeys()可以实现更好的性能。

对于那些使用Python 3的人:

>>> list(x.keys()).index("c")
1

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

  

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

     

2.7版本中的新功能。

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

另外,要获得'cat'的索引,您只需使用:

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