Как узнать положение элементов в упорядоченном словаре 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% быстрее в моей быстрой проверке здравомыслия).