HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>19 авг 2021</li>
2 <ul><li>19 авг 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.</p>
4 </ul><p>Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.</p>
5 <p>Dana Moskvina / Skillbox Media</p>
5 <p>Dana Moskvina / Skillbox Media</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
7 <p>Словарь в Python - это набор из пар "ключ: значение". Основные его свойства:</p>
7 <p>Словарь в Python - это набор из пар "ключ: значение". Основные его свойства:</p>
8 <ul><li>В каждой паре ключ (key) указывает на значение (value).</li>
8 <ul><li>В каждой паре ключ (key) указывает на значение (value).</li>
9 <li>Ключи уникальны, повторов нет. Значения могут быть одинаковыми.</li>
9 <li>Ключи уникальны, повторов нет. Значения могут быть одинаковыми.</li>
10 <li>В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.</li>
10 <li>В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.</li>
11 </ul><p>Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки {}.</p>
11 </ul><p>Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки {}.</p>
12 - author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" }<p>В качестве ключей можно использовать строки, числа (целые и дробные), кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В качестве значений можно использовать любой тип данных.</p>
12 + author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" }<p>В качесте ключей можно использовать строки, числа (целые и дробные), кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В качестве значений можно использовать любой тип данных.</p>
13 <p>Работа со словарём подразумевает вызов хранимых в нём значений по ключу. И здесь есть несколько способов.</p>
13 <p>Работа со словарём подразумевает вызов хранимых в нём значений по ключу. И здесь есть несколько способов.</p>
14 <p>Первый способ, который узнают начинающие питонисты, - это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.</p>
14 <p>Первый способ, который узнают начинающие питонисты, - это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.</p>
15 author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" } author['username'] &gt;&gt;&gt; 'dao1962' author['age'] &gt;&gt;&gt; Traceback (most recent call last): File "&lt;pyshell#2&gt;", line 1, in &lt;module&gt; author['age'] KeyError: 'age'<p>Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.</p>
15 author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" } author['username'] &gt;&gt;&gt; 'dao1962' author['age'] &gt;&gt;&gt; Traceback (most recent call last): File "&lt;pyshell#2&gt;", line 1, in &lt;module&gt; author['age'] KeyError: 'age'<p>Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.</p>
16 <p>Путей решения этой проблемы несколько:</p>
16 <p>Путей решения этой проблемы несколько:</p>
17 <ul><li>Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы - например, сообщение.</li>
17 <ul><li>Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы - например, сообщение.</li>
18 </ul>try: author['age'] except KeyError: print('Такого ключа нет') &gt;&gt;&gt; 'Такого ключа нет'<ul><li>Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё - расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.</li>
18 </ul>try: author['age'] except KeyError: print('Такого ключа нет') &gt;&gt;&gt; 'Такого ключа нет'<ul><li>Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё - расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.</li>
19 </ul><p>Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.</p>
19 </ul><p>Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.</p>
20 <p>Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:</p>
20 <p>Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:</p>
21 <ul><li>Первый (обязательный) - ключ, значение которого мы хотим вызвать.</li>
21 <ul><li>Первый (обязательный) - ключ, значение которого мы хотим вызвать.</li>
22 <li>Второй (опциональный) - значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None - его метод и вернёт.</li>
22 <li>Второй (опциональный) - значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None - его метод и вернёт.</li>
23 </ul>author.get('first_name') &gt;&gt;&gt; 'Виктор' author.get('age') # ничего не происходит print(author.get('age')) # поэтому используем print &gt;&gt;&gt; None author.get('age', 'Такого ключа в словаре нет') &gt;&gt;&gt; 'Такого ключа в словаре нет'<p>Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр - либо None, либо, например, строку с сообщением.</p>
23 </ul>author.get('first_name') &gt;&gt;&gt; 'Виктор' author.get('age') # ничего не происходит print(author.get('age')) # поэтому используем print &gt;&gt;&gt; None author.get('age', 'Такого ключа в словаре нет') &gt;&gt;&gt; 'Такого ключа в словаре нет'<p>Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр - либо None, либо, например, строку с сообщением.</p>
24 <p>И не надо обрабатывать ошибки и исключения.</p>
24 <p>И не надо обрабатывать ошибки и исключения.</p>
25 <p>Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.</p>
25 <p>Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.</p>
26 <p>Обнаружив, что вызываемого ключа не существует, метод .setdefault():</p>
26 <p>Обнаружив, что вызываемого ключа не существует, метод .setdefault():</p>
27 <ul><li>сам создаёт ключ;</li>
27 <ul><li>сам создаёт ключ;</li>
28 <li>создаёт к нему в пару значение, заданное вами (по умолчанию - None);</li>
28 <li>создаёт к нему в пару значение, заданное вами (по умолчанию - None);</li>
29 <li><strong>добавляет получившуюся пару в словарь;</strong></li>
29 <li><strong>добавляет получившуюся пару в словарь;</strong></li>
30 <li><strong>возвращает значение.</strong></li>
30 <li><strong>возвращает значение.</strong></li>
31 </ul><p>Если вы не указали второй параметр, он вернёт None, то есть ничего.</p>
31 </ul><p>Если вы не указали второй параметр, он вернёт None, то есть ничего.</p>
32 author.setdefault('middle_name') # None - значит ничего author # добавился ключ 'middle_name' со значением None &gt;&gt;&gt; { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, } author.setdefault('book', 'Омон Ра') &gt;&gt;&gt; 'Омон Ра' author &gt;&gt;&gt; { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, 'book': 'Омон Ра', }<p>Обратите внимание, что этот метод не меняет значения у существующих ключей.</p>
32 author.setdefault('middle_name') # None - значит ничего author # добавился ключ 'middle_name' со значением None &gt;&gt;&gt; { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, } author.setdefault('book', 'Омон Ра') &gt;&gt;&gt; 'Омон Ра' author &gt;&gt;&gt; { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, 'book': 'Омон Ра', }<p>Обратите внимание, что этот метод не меняет значения у существующих ключей.</p>
33 author.setdefault('first_name', 'Владимир') &gt;&gt;&gt; 'Виктор'<p>Если вам не нужно изменять сам словарь, то пользуйтесь вызовом с помощью .get(). Если запрашиваемые ключи и значения отсутствуют в словаре и их нужно туда добавить, то подойдёт метод .setdefault(). Оба этих метода надёжнее, чем "школьный" вызов с помощью квадратных скобок.</p>
33 author.setdefault('first_name', 'Владимир') &gt;&gt;&gt; 'Виктор'<p>Если вам не нужно изменять сам словарь, то пользуйтесь вызовом с помощью .get(). Если запрашиваемые ключи и значения отсутствуют в словаре и их нужно туда добавить, то подойдёт метод .setdefault(). Оба этих метода надёжнее, чем "школьный" вызов с помощью квадратных скобок.</p>
34 <p>Хотите узнать больше? На курсе "<a>Профессия Python-разработчик</a>" вы познакомитесь со всеми методами и инструментами Python, которые необходимы программисту для успешного трудоустройства. Приходите!</p>
34 <p>Хотите узнать больше? На курсе "<a>Профессия Python-разработчик</a>" вы познакомитесь со всеми методами и инструментами Python, которые необходимы программисту для успешного трудоустройства. Приходите!</p>
35 <p>Python для всех</p>
35 <p>Python для всех</p>
36 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
36 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
37 <p><a>Пройти бесплатно</a></p>
37 <p><a>Пройти бесплатно</a></p>
38 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
38 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>