Самый короткий способ получить первый элемент `OrderedDict` в Python 3

Каков самый короткий способ получить первый элемент OrderedDict в Python 3?

Мой лучший:

 list(ordered_dict.items())[0] 

Довольно долго и уродливо.

Я могу думать:

 next(iter(ordered_dict.items())) # Fixed, thanks Ashwini 

Но это не очень самоописание.

Любые лучшие предложения?

4 Solutions collect form web for “Самый короткий способ получить первый элемент `OrderedDict` в Python 3”

Практика программирования для чтения

В общем, если вы чувствуете, что код не является самоописанием, обычное решение состоит в том, чтобы превратить его в хорошо названную функцию:

 def first(s): '''Return the first element from an ordered collection or an arbitrary element from an unordered collection. Raise StopIteration if the collection is empty. ''' return next(iter(s)) 

С помощью этой вспомогательной функции последующий код становится очень читаемым:

 >>> extension = {'xml', 'html', 'css', 'php', 'xhmtl'} >>> one_extension = first(extension) 

Шаблоны для извлечения единого значения из коллекции

Обычными способами получения элемента из набора , dict , OrderedDict , генератора или другой неиндексируемой коллекции являются:

 for value in some_collection: break 

а также:

 value = next(iter(some_collection)) 

Последнее хорошо, потому что функция next () позволяет указать значение по умолчанию, если коллекция пуста, или вы можете позволить ей создать исключение. Функция next () также явна, что она запрашивает следующий элемент.

Альтернативный подход

Если вам действительно нужны индексирование и нарезка и другие последовательности поведения (например, индексирование нескольких элементов), просто преобразовать в список со list(some_collection) или использовать [itertools.islice()][2] :

 s = list(some_collection) print(s[0], s[1]) s = list(islice(n, some_collection)) print(s) 

Используйте popitem(last=False) , но имейте в виду, что он удаляет запись из словаря, т. popitem(last=False) .

 from collections import OrderedDict o = OrderedDict() o['first'] = 123 o['second'] = 234 o['third'] = 345 first_item = o.popitem(last=False) >>> ('first', 123) 

Для получения дополнительной информации ознакомьтесь с руководством по коллекциям . Он также работает с Python 2.x.

Подкласс и добавление метода в OrderedDict будет ответом на проблемы с ясностью:

 >>> o = ExtOrderedDict(('a',1), ('b', 2)) >>> o.first_item() ('a', 1) 

Реализация ExtOrderedDict :

 class ExtOrderedDict(OrderedDict): def first_item(self): return next(iter(self.items())) 
 first = next #<hide this somewhere first(ordered_dict.iteritems()) 
  • Что означает «SSLError: PEM lib (_ssl.c: 2532)» означает использование библиотеки ssl Python?
  • Зачем использовать встроенные функции setattr () и getattr ()?
  • Почему у Python есть «else» в «for-else» и «while-else»?
  • Почему определение более быстрого определения в Python 2.7, чем в Python 3.x?
  • Как общаться с шахматным движком в Python?
  • Большинство Pythonic способ объявить абстрактное свойство класса
  • (не могу найти) счетчик счетчика python most_common ()
  • Невозможно установить / обновить пакеты с помощью python-pip (« Not a directory»)
  • Python - лучший язык программирования в мире.