5

Получение произвольного элемента из словаря в Python

42

У меня есть словарь mydict, который может быть непустым. Чтобы получить произвольный элемент из него, я использую следующий код:

mydict[list(mydict.keys())[0]]

Существует ли более удобный или эффективный способ сделать это?

5 ответ(ов)

6

В Python 3, для неразрушающего и итеративного получения значения из словаря можно использовать следующий код:

next(iter(mydict.values()))

В Python 2 аналогичным образом можно сделать так:

mydict.itervalues().next()

Если вам нужно, чтобы код работал как в Python 2, так и в Python 3, вы можете использовать пакет six:

six.next(six.itervalues(mydict))

Однако такой вариант может показаться несколько запутанным, и я бы предпочел, чтобы ваш код был проще.

Если же вам нужно удалить любой элемент из словаря, вы можете воспользоваться следующим способом:

key, value = mydict.popitem()

Обратите внимание, что термин "первый" может быть не совсем уместен, поскольку в словарях Python < 3.6 элементы неупорядочены. Словари в Python 3.6 и выше являются упорядоченными.

1

Если вам нужно получить доступ только к одному элементу (в данном случае к первому, так как словари не гарантируют порядок), вы можете сделать это в Python 2:

my_dict.keys()[0]    # ключ "первого" элемента
my_dict.values()[0]  # значение "первого" элемента
my_dict.items()[0]   # кортеж (ключ, значение) "первого" элемента

Обратите внимание, что (насколько мне известно) Python не гарантирует, что два последовательных вызова любого из этих методов вернут список в одном и том же порядке. Это не поддерживается в Python 3.

В Python 3 вы можете использовать следующий код:

list(my_dict.keys())[0]    # ключ "первого" элемента
list(my_dict.values())[0]  # значение "первого" элемента
list(my_dict.items())[0]   # кортеж (ключ, значение) "первого" элемента

Таким образом, в Python 3 необходимо явно преобразовать ключи, значения или элементы в список, чтобы получить доступ к первому элементу.

0

В Python 3, когда вы вызываете метод dict.keys(), он возвращает объект типа dict_keys. При попытке получить первый элемент ключей словаря с помощью следующего кода:

dict.keys()[0]

вы получите ошибку:

TypeError: 'dict_keys' object does not support indexing

Эта ошибка возникает из-за того, что объект dict_keys не поддерживает индексирование.

Чтобы получить первый элемент ключей, вы можете сначала преобразовать dict_keys в список, а затем воспользоваться методом среза:

list(dict.keys())[0]

Этот способ позволит вам успешно получить первый ключ из словаря.

0

Чтобы получить ключ

next(iter(mydict))

Чтобы получить значение

next(iter(mydict.values()))

Чтобы получить и ключ, и значение

next(iter(mydict.items()))  # или next(iter(mydict.viewitems())) в Python 2

Первые два варианта работают в Python 2 и 3. Последние два являются ленивыми в Python 3, но не в Python 2.

0

Вы можете получить значение первого элемента словаря, используя следующий подход. В этом примере мы создаем словарь a, который содержит пары ключ-значение. Затем вы можете извлечь значение первого элемента, используя функцию list() для получения списка ключей и индексируя его.

Вот пример кода, который работает как в Python 2, так и в Python 3:

a = {"a": 2, "b": 3}
first_key = list(a)[0]  # Получаем первый ключ
value = a[first_key]     # Извлекаем значение по этому ключу
print(value)             # Выводим значение

Результат будет:

2

Обратите внимание, что в словарях до версии Python 3.7 порядок ключей не гарантируется. Однако в Python 3.7 и выше порядок будет соблюден в соответствии с порядком добавления элементов. Тем не менее, если вам нужно строго определять порядок, рекомендую использовать collections.OrderedDict.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь