Книга «Изучаем Python»



Pdf көрінісі
бет66/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   62   63   64   65   66   67   68   69   ...   238
Байланысты:
2 5343781172763690906

favorite_languages.py

favorite_languages = {

'jen': 'python',

'sarah': 'c',

'edward': 'ruby',

'phil': 'python',

}



for name, language in favorite_languages.items():



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

        language.title() + ".")

Код в точке  приказывает Python перебрать все пары «ключ—значение» в словаре. 

В процессе перебора пар ключ сохраняется в переменной 

name


, а значение — в пере-

менной 


language

. С этими содержательными именами намного проще понять, что 

делает команда 

print


 в точке .

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

Jen's favorite language is Python.

Sarah's favorite language is C.

Phil's favorite language is Python.

Edward's favorite language is Ruby.

Такой способ перебора точно так же работает и в том случае, если в словаре будут 

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

Перебор всех ключей в словаре

Метод 


keys()

 удобен в тех случаях, когда вы не собираетесь работать со всеми 

значениями в словаре. Переберем словарь 

favorite_languages

 и выведем имена 

всех людей, участвовавших в опросе:

favorite_languages = {

'jen': 'python',

'sarah': 'c',

'edward': 'ruby',

'phil': 'python',

}



for name in favorite_languages.keys():

    print(name.title())




110    Глава 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    Глава 6  •  Словари

Перебор всех значений в словаре

Если вас прежде всего интересуют значения, содержащиеся в словаре, используйте 

метод 


values()

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

просто получить список всех языков, выбранных в опросе, и вас не интересуют 

имена людей, выбравших каждый язык:

favorite_languages = {

'jen': 'python',

'sarah': 'c',

'edward': 'ruby',

'phil': 'python',

}

print("The following languages have been mentioned:")



for language in favorite_languages.values():

    print(language.title())

Команда 

for


 читает каждое значение из словаря и сохраняет его в переменной 

language


. При выводе этих значений будет получен список всех выбранных языков:

The following languages have been mentioned: 

Python 

Python 



Ruby

Значения извлекаются из словаря без проверки на возможные повторения. Для не-

больших словарей это может быть приемлемо, но в опросах с большим количеством 

респондентов список будет содержать слишком много дубликатов. Чтобы получить 

список выбранных языков без повторений, можно воспользоваться множеством (set). 

Множество в целом похоже на список, но все его элементы должны быть уникальными:

favorite_languages = {

'jen': 'python',

'sarah': 'c',

'edward': 'ruby',

'phil': 'python',

}

print("The following languages have been mentioned:")



for language in set(favorite_languages.values()):

print(language.title())

Когда список, содержащий дубликаты, заключается в вызов 

set()

, Python находит 



уникальные элементы списка и строит множество из этих элементов. В точке  

set()


 используется для извлечения уникальных языков из 

favorite_languages.

values()

. В результате создается не содержащий дубликатов список языков про-

граммирования, упомянутых участниками опроса:

The following languages have been mentioned:

Python

C

Ruby




Вложение    113

В ходе дальнейшего изучения Python вы часто будете обнаруживать встроенные 

возможности языка, которые помогают сделать с данными именно то, что вам 

требуется.





Достарыңызбен бөлісу:
1   ...   62   63   64   65   66   67   68   69   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет