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

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

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

//  Ordered_dict is OrderedDictionary

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

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

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

3 ответов


вы можете получить список ключей с 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

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

коллекции класса.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

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

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