2011-08-01 59 views
26

我們可以知道Python有序字典中項目的位置嗎? 例如:如何知道Python有序字典中項目的位置

如果我有字典:

// Ordered_dict is OrderedDictionary 

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

現在怎麼知道在哪個位置貓屬於? 是否可以得到如下答案:

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

+7

你的字典是不是一個有序字典 - 這是一個無序的普通的Python字典。 –

+8

僅僅因爲你稱之爲有序的字典不會讓它成爲一個! – Jacob

回答

49

你可能會得到鑰匙的名單與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 
+23

'名單(運行起來也())。指數( '動物')'使用人** ** Python3結束了這裏。 – Torxed

+6

看來,簡單地使用'名單(d)的.index(「動物」)'也工作在Python 3,除非我失去了一些東西。 – Marein

+0

用於Python 3見:https://stackoverflow.com/q/44147047/281545 –

3

那些想首先你需要的是閱讀文檔。如果你開的python教程,然後嘗試找到OrderedDict你會看到以下信息:

類collections.OrderedDict([項目]) - 返回一個字典 子類的實例,支持常用的字典的方法。 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 
2

對於Python3:tuple(d).index('animal')

這幾乎與上面相同Marein的回答,但使用的是不可變元組而不是可變列表。所以它應該運行得更快一點(快速完整性檢查快了約12%)。

+0

注意,這也適用在Python 2(元組(d)剛過字典的鍵進行迭代,並且產生的元組) –