Перебор всех пар «ключ—значение»

We use cookies. Read the Privacy and Cookie Policy

Прежде чем ознакомиться с разными способами перебора, рассмотрим новый словарь, предназначенный для хранения информации о пользователе веб-сайта. В следующем словаре хранится имя пользователя, его имя и фамилия:

user_0 = {

. .'username': 'efermi',

. .'first': 'enrico',

. .'last': 'fermi',

. .}

То, что вы уже узнали в этой главе, позволит вам обратиться к любому отдельному атрибуту user_0. Но что если вы хотите просмотреть все данные из ­словаря этого пользователя? Для этого можно воспользоваться перебором в цикле for:

user.py

user_0 = {

'username': 'efermi',

'first': 'enrico',

'last': 'fermi',

}

(1) for key, value in user_0.items():

(2) . .print(" Key: " + key)

(3) . .print("Value: " + value)

Как мы видим в точке (1) , чтобы написать цикл for для словаря, необходимо создать имена для двух переменных, в которых будет храниться ключ и значение из каждой пары «ключ—значение». Этим двум переменным можно присвоить любые имена — с короткими однобуквенными именами код будет работать точно так же:

for k, v in user_0.items()

Вторая половина команды for в точке (1) включает в себя имя словаря, за которым следует вызов метода items(), возвращающий список пар «ключ—значение». Цикл for сохраняет компоненты пары в двух указанных переменных. В предыдущем примере мы используем переменные для вывода каждого ключа v, за которым следует связанное значение w. " " в первой команде print гарантирует, что перед каждой парой «ключ—значение» в выводе будет вставлена пустая строка:

Key: last

Value: fermi

Key: first

Value: enrico

Key: username

Value: efermi

Снова обратите внимание на то, что пары «ключ—значение» не возвращаются в порядке их хранения даже при переборе в словаре. Python не интересует порядок хранения пар «ключ—значение»; отслеживаются только связи между отдельными ключами и их значениями.

Перебор всех пар «ключ—значение» особенно хорошо работает для таких словарей, как в примере favorite_languages.py на с. 106: то есть для словарей, хранящих один вид информации со многими разными ключами. Перебрав словарь favorite_languages, вы получите имя каждого человека и его любимый язык программирования. Так как ключ всегда содержит имя, а значение — язык программирования, в цикле вместо имен key и value используются переменные name и language. С таким выбором имен читателю кода будет проще следить за тем, что происходит в цикле:

favorite_languages.py

favorite_languages = {

'jen': 'python',

'sarah': 'c',

'edward': 'ruby',

'phil': 'python',

}

(1) for name, language in favorite_languages.items():

(2) . .print(name.title() + "'s favorite language is " +

. . . .language.title() + ".")

Код в точке (1) приказывает Python перебрать все пары «ключ—значение» в словаре. В процессе перебора пар ключ сохраняется в переменной name, а значение — в переменной language. С этими содержательными именами намного проще понять, что делает команда print в точке (2).

Всего в нескольких строках кода выводится вся информация из ­опроса:

Jen's favorite language is Python.

Sarah's favorite language is C.

Phil's favorite language is Python.

Edward's favorite language is Ruby.

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