Получение произвольного элемента из словаря в Python
У меня есть словарь mydict
, который может быть непустым. Чтобы получить произвольный элемент из него, я использую следующий код:
mydict[list(mydict.keys())[0]]
Существует ли более удобный или эффективный способ сделать это?
5 ответ(ов)
В 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 и выше являются упорядоченными.
Если вам нужно получить доступ только к одному элементу (в данном случае к первому, так как словари не гарантируют порядок), вы можете сделать это в 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 необходимо явно преобразовать ключи, значения или элементы в список, чтобы получить доступ к первому элементу.
В 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]
Этот способ позволит вам успешно получить первый ключ из словаря.
Чтобы получить ключ
next(iter(mydict))
Чтобы получить значение
next(iter(mydict.values()))
Чтобы получить и ключ, и значение
next(iter(mydict.items())) # или next(iter(mydict.viewitems())) в Python 2
Первые два варианта работают в Python 2 и 3. Последние два являются ленивыми в Python 3, но не в Python 2.
Вы можете получить значение первого элемента словаря, используя следующий подход. В этом примере мы создаем словарь 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
.
Преобразование списка словарей в DataFrame pandas
Почему использовать dict.get(key) вместо dict[key]?
Как преобразовать вложенный словарь Python в объект?
Ошибка: "'dict' объект не имеет метода 'iteritems'"
Есть ли питоний способ объединить два словаря (сложив значения для ключей, которые присутствуют в обоих)?