Как получить ключи от словаря в виде списка на Python

  1. dict.keys() для получения ключей словаря Python
  2. Петли для получения ключей словаря Python
  3. Список понятий для получения ключей Python Dictionary
  4. Оператор распаковки * словаря Python для получения ключей
  5. Сравнение производительности во время выполнения

Получение представления о словарных ключах в виде последовательности является повседневным случаем использования в программировании на Python.

Существует несколько подходов к его достижению, каждый из которых обладает различными характеристиками производительности.

dict.keys() для получения ключей словаря Python

Функция dict.keys() возвращает dict_keys - итерабельный вид ключей словаря.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

Вы можете выполнить итерацию по dict_keys напрямую, без преобразования в список. Для многих случаев использования, dict_keys может быть удален вместо списка в API, и это будет работать.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

Если вам нужно работать с ключами словаря строго так же, как и со списками, например, если вы хотите, чтобы чтобы иметь возможность использовать индекс для считывания определенного ключа из последовательности, необходимо преобразовать dict_keys в список первым.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

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

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

Петли для получения ключей словаря Python

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

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

Список понятий для получения ключей Python Dictionary

Синтаксическим улучшением по сравнению с использованием циклов может быть использование Python’s list comprehesions. С помощью list comprehensions вы можете конденсировать вышеописанный цикл в один лайнер.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Оператор распаковки * словаря Python для получения ключей

Начиная с Python 3.5, мы можем использовать оператор распаковка *, чтобы получить доступ к ключам словаря. Эта возможность была введена с помощью PEP 448 - Дополнительные обобщения распаковки.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Положительной стороной этого подхода является то, что вы можете распаковывать ключи словарей в другие коллекции, помимо списков, например кортежи или сеты.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

Сравнение производительности во время выполнения

Время исполнения каждого из вышеперечисленных подходов варьируется.

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

Как следует из приведенных выше таймингов, оператор распаковки * является самым быстрым.

Предпочитайте его, если только у вас нет веских причин отступать от любого из других подходов.

Сопутствующая статья - Python dictionary

  • Как проверить наличие ключа в словаре на Python языке
  • Как сортировать Pythonский словарь по значению
  • Как объединить два словаря на Python 2 и 3
  • Как удалить элемент из словаря Pythonа
  • comments powered by Disqus