Подтвердить что ты не робот

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

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

Например:

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

// Ordered_dict is OrderedDictionary

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

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

position (Ordered_dict["animal"]) = 2? или как-то иначе?

4b9b3361

Ответ 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