Как узнать положение элементов в упорядоченном словаре Python - PullRequest
32 голосов
/ 01 августа 2011

Можем ли мы узнать положение элементов в упорядоченном словаре Python?

Например:

Если у меня есть словарь:

// Ordered_dict is OrderedDictionary

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

Теперь, как мне узнать вкакой позиции cat принадлежит?Можно ли получить ответ типа:

position (Ordered_dict["animal"]) = 2 ? или каким-либо другим способом?

Ответы [ 3 ]

61 голосов
/ 01 августа 2011

Вы можете получить список ключей со свойством keys:

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

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

Лучшая производительность может быть достигнута при использовании iterkeys().

Для тех, кто использует Python3:

>>> list(x.keys()).index("c")
1
4 голосов
/ 01 июня 2017

Для Python3: tuple(d).index('animal')

Это почти совпадает с ответом Марейна выше, но использует неизменяемый кортеж вместо изменяемого списка.Так что он должен работать немного быстрее (примерно на 12% быстрее в моей быстрой проверке работоспособности).

3 голосов
/ 01 августа 2011

Сначала подумайте, что вам нужно прочитать документацию. Если вы откроете руководство по Python, а затем попытаетесь найти информацию об OrderedDict, вы увидите следующее:

class collection.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
...