Глава 6 • Словари
Строка
приказывает Python извлечь из словаря
favorite_languages
все ключи
и последовательно сохранять их в переменной
name
. В выходных данных представ-
лены имена всех людей, участвовавших в опросе:
Jen
Sarah
Phil
Edward
На самом деле перебор ключей используется по умолчанию при переборе словаря,
так что этот код будет работать точно так же, как если бы вы написали
for name in favorite_languages:
вместо…
for name in favorite_languages.keys():
Используйте явный вызов метода
keys()
, если вы считаете, что он упростит чтение
вашего кода, — или опустите его при желании.
Чтобы обратиться в цикле к значению, связанному с интересующим вас ключом,
используйте текущий ключ. Для примера выведем для пары друзей сообщение
о выбранном ими языке. Мы переберем имена в словаре, как это делалось ранее,
но, когда имя совпадает с именем одного из друзей, программа будет выводить
специальное сообщение об их любимом языке:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() +
", I see your favorite language is " +
favorite_languages[name].title() + "!")
В точке
строится список друзей, для которых должно выводиться сообщение.
В цикле выводится имя очередного участника опроса, а затем в точке
програм-
ма проверяет, входит ли текущее имя в список друзей. Если имя входит в список,
выводится специальное приветствие с упоминанием выбранного языка. Чтобы
получить язык в точке
, мы используем имя словаря и текущее значение
name
как ключ. Имя выводится для всех участников, но только друзья получают еще
и специальное сообщение:
Edward
Phil
Hi Phil, I see your favorite language is Python!
Sarah
Перебор словаря
111
Hi Sarah, I see your favorite language is C!
Jen
Метод
keys()
также может использоваться для проверки того, участвовал ли кон-
кретный человек в опросе:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
if 'erin' not in favorite_languages.keys():
print("Erin, please take our poll!")
Метод
keys()
не ограничивается перебором: он возвращает список всех ключей,
и строка
просто проверяет, входит ли ключ
'erin'
в список. Так как ключ в спи-
ске отсутствует, программа выводит сообщение:
Erin, please take our poll!
Упорядоченный перебор ключей словаря
Словарь всегда поддерживает связь между ключом и связанным с ним значением,
но порядок получения элементов из словаря непредсказуем. Впрочем, это не со-
здает проблем, потому что обычно требуется лишь получить правильное значение,
связанное с каждым ключом.
Один из способов получения элементов в определенном порядке основан на сор-
тировке ключей, возвращаемых циклом
for
. Для получения упорядоченной копии
ключей можно воспользоваться функцией
sorted()
:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
Эта команда
for
не отличается от других команд
for
, если не считать того, что
метод
dictionary.keys()
заключен в вызов функции
sorted()
. Эта конструкция
приказывает Python выдать список всех ключей в словаре и отсортировать его
перед тем, как перебирать элементы. В выводе перечислены все пользователи,
участвовавшие в опросе, а их имена упорядочены по алфавиту:
Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.
112
Достарыңызбен бөлісу: |