web-dev-qa-db-ja.com

Python順序付けられた辞書のアイテムの位置を知る方法

Pythonの順序付けられた辞書内のアイテムの位置を知ることができますか?

例えば:

辞書がある場合:

_// Ordered_dict is OrderedDictionary

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

では、どの位置でcatが属しているかをどのようにして知ることができますか?次のような答えを得ることは可能ですか?

position (Ordered_dict["animal"]) = 2 ?または他の方法で?

32

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
_
61

Python3の場合:Tuple(d).index('animal')

これは上記のMareinの答えとほぼ同じですが、可変リストの代わりに不変のタプルを使用します。そのため、少し速く実行する必要があります(クイックサニティチェックでは〜12%速くなります)。

4
Amnon Harel

最初にドキュメントを読む必要があると考えてください。 Pythonチュートリアルを開いてから、OrderedDictに関する情報を見つけようとすると、次のように表示されます。

class collections.OrderedDict([items])-dictサブクラスのインスタンスを返し、通常の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