Как узнать положение элементов в упорядоченном словаре Python
Можем ли мы узнать положение элементов в упорядоченном словаре Python?
Например:
Если у меня есть словарь:
// Ordered_dict is OrderedDictionary
Ordered_dict = {"fruit": "banana", "drinks": "water", "animal": "cat"}
Теперь, как я узнаю, в каком положении cat
принадлежит? Можно ли получить ответ вроде:
position (Ordered_dict["animal"]) = 2?
или как-то иначе?
Ответы
Ответ 1
Вы можете получить список ключей с помощью свойства 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
Ответ 2
Для Python3: tuple(d).index('animal')
Это почти то же самое, что и ответ Marein выше, но использует неизменяемый кортеж вместо измененного списка. Поэтому он должен работать немного быстрее (~ 12% быстрее в моей быстрой проверке).
Ответ 3
Сначала подумайте, что вам нужно прочитать документацию. Если вы откроете руководство по 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