Автор оригинала: Guest Contributor.
Вступление
Словари являются одной из наиболее часто используемых структур данных во всех разработках программного обеспечения, и не без оснований. Они позволяют нам хранить наши данные в аккуратных парах ключ , значение , что, в свою очередь, дает нам возможность, в среднем, получить доступ к нашим данным в O(1)
время.
При использовании словаря важно знать, как перебирать его. Невозможность восстановить сохраненные данные делает их практически бесполезными.
В этой статье мы увидим как перебирать словарь Python со всеми видами итераторов и циклом for
.
Использование метода keys()
Словари Python имеют удобный метод, который позволяет нам легко перебирать все инициализированные ключи в словаре, keys()
.
Имейте в виду, что начиная с Python 3 этот метод не возвращает список, а возвращает объект view . A view object – это именно то, что говорится в названии, представление некоторых данных.
Это означает, что мы можем перебирать эти данные без проблем, но если мы действительно хотим сохранить список ключей, нам нужно материализовать его. Что можно легко сделать, переадресовав предоставленный объект view в конструктор list
.
Давайте посмотрим, как все это работает:
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3} # Here we're just 'looking' at the keys, # we're not actually constructing a list # out of them key_view = my_dict.keys() print("Key view:", key_view) print("Type:", type(key_view),end="\n\n") # Here we're materializing the keys # into a list ofo keys key_list = list(my_dict.keys()) print("Key list:", key_list) print("Type: ", type(key_list),end="\n\n") # And as we can see, view can be easily be # used for iterating over a dictionary for key in my_dict.keys(): print(key, ':', my_dict[key])
Запуск кода дает нам следующий результат:
Key view: dict_keys(['alpha', 'beta', 'gamma']) Type:Key list: ['alpha', 'beta', 'gamma'] Type: alpha : 5 beta : 4 gamma : 3
Альтернативным способом сделать это было бы:
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3} for key in my_dict: print(key, ':', my_dict[key])
При использовании ключевого слова in
в сочетании со словарем словарь вызывает свой метод __iter__ ()
. Затем этот метод возвращает итератор, который используется для неявного перебора ключей предоставленного словаря.
Использование метода values()
Как и метод keys ()
, метод values()
также возвращает объект представления, но вместо того, чтобы перебирать ключи, он перебирает значения:
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3} # Inspecting the view of the values # in the dictionary key_list = list(my_dict.values()) print("Value list:", key_list) print("Type: ", type(key_list), end="\n\n") for value in my_dict.values(): print(value, end=" ")
Запуск кода дает нам следующий результат:
Value list: [5, 4, 3] Type:5 4 3
В отличие от предыдущего метода, этот предоставляет только значения . Это полезно, когда вас не беспокоят ключи .
Использование метода items()
Как и методы keys()
и values ()
, метод items()
также возвращает объект представления, но вместо того , чтобы просто перебирать либо keys
, либо values
, он перебирает пары (key, value)
.
Давайте посмотрим, как все это работает:
my_dict = {'alpha': 5, 'beta': 4, 'gamma': 3} # Inspecting the view of the (key,value) pairs key_list = list(my_dict.items()) print("(key,value) pair list:", key_list) print("Type: ", type(key_list), end="\n\n") for item in my_dict.items(): print(item, end=" ")
Запуск кода дает нам следующий результат:
(key,value) pair list: [('alpha', 5), ('beta', 4), ('gamma', 3)] Type:('alpha', 5) ('beta', 4) ('gamma', 3)
Чтобы сразу же назначить оба ключа и значения одновременно, мы можем использовать распаковку кортежа и извлечь их с помощью переменных для каждого значения в кортеже:
for key, value in my_dict.items(): print(key,':',value)
Важно отметить, что в более старых версиях Python 2 , где items ()
, keys ()
и values()
возвращалась копия данных из словаря . В то время как в Python 3 они возвращают объект представления.
Они более эффективны, поскольку обеспечивают динамическое представление и, кроме того, если какие-либо изменения будут внесены в исходный словарь, они немедленно будут отражены в объекте представления (и наоборот).
Вывод
В этой статье мы рассмотрели различные способы итерации по Python dictionary . Это включает в себя методы keys()
, values()
и items()
с циклом for
.