Вступление
Словари - одна из наиболее часто используемых структур данных при
разработке программного обеспечения, и на то есть веские причины. Они
позволяют нам хранить наши данные в аккуратных парах ключ- значение
, что, в свою очередь, дает нам возможность получать доступ к нашим
данным в среднем за время O(1)
.
При использовании словаря важно знать, как его перебирать. Невозможность восстановить сохраненные данные делает их практически бесполезными.
В этой статье мы увидим, как перебирать словарь Python со всеми видами
итераторов и циклом for
Использование метода keys ()
В словарях Python есть удобный метод, который позволяет нам легко
перебирать все инициализированные ключи в словаре keys()
.
Имейте в виду, что начиная с Python 3 этот метод не возвращает список, вместо этого он возвращает объект представления . Объект представления в точности соответствует названию: представление некоторых данных.
Это означает, что мы можем без проблем перебирать указанные данные, но
если мы действительно хотим сохранить список ключей, нам нужно его
материализовать. Это легко сделать, перенаправив предоставленный
объект представления в конструктор 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: <class 'dict_keys'>
Key list: ['alpha', 'beta', 'gamma']
Type: <class 'list'>
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: <class 'list'>
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: <class 'list'>
('alpha', 5) ('beta', 4) ('gamma', 3)
Чтобы немедленно назначить ключи и значения одновременно, мы можем использовать распаковку кортежа и извлекать их, используя переменные для каждого значения в кортеже:
for key, value in my_dict.items():
print(key,':',value)
Важно отметить, что в более старых версиях Python 2, items()
,
keys()
и values()
возвращали копию данных из словаря . В Python
3 они возвращают объект представления.
Они более эффективны, поскольку обеспечивают динамическое представление, и, кроме того, если в исходный словарь вносятся какие-либо изменения, они немедленно отражаются в объекте представления (и наоборот).
Заключение
В этой статье мы рассмотрели различные способы перебора словаря
Python. Сюда входят методы keys()
, values()
и items()
с циклом
for