0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>6 июн 2023</li>
2
<ul><li>6 июн 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Продолжаем осваивать "змеиный" язык. Сегодня поговорим о словарях - важном инструменте для хранения данных в Python.</p>
4
</ul><p>Продолжаем осваивать "змеиный" язык. Сегодня поговорим о словарях - важном инструменте для хранения данных в Python.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
6
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
7
<p>Нет, словари нужны не для того, чтобы переводить запутанный код программистов на человеческий. Их используют для того, чтобы удобно хранить данные и быстро получать к ним доступ по запросу. В этой статье подробно разберём, что такое словари и как с ними работать в Python.</p>
7
<p>Нет, словари нужны не для того, чтобы переводить запутанный код программистов на человеческий. Их используют для того, чтобы удобно хранить данные и быстро получать к ним доступ по запросу. В этой статье подробно разберём, что такое словари и как с ними работать в Python.</p>
8
<p>А если вы уже знакомы со словарями и хотите освежить в памяти отдельные моменты, используйте навигацию или<a>скачайте шпаргалку в конце статьи</a>.</p>
8
<p>А если вы уже знакомы со словарями и хотите освежить в памяти отдельные моменты, используйте навигацию или<a>скачайте шпаргалку в конце статьи</a>.</p>
9
<ul><li><a>Что такое словари</a></li>
9
<ul><li><a>Что такое словари</a></li>
10
<li><a>Как их создавать</a></li>
10
<li><a>Как их создавать</a></li>
11
<li><a>Основные операции</a></li>
11
<li><a>Основные операции</a></li>
12
</ul><ul><li><a>Достаём значение</a></li>
12
</ul><ul><li><a>Достаём значение</a></li>
13
<li><a>Добавляем новый элемент</a></li>
13
<li><a>Добавляем новый элемент</a></li>
14
<li><a>Удаляем ключ</a></li>
14
<li><a>Удаляем ключ</a></li>
15
<li><a>Изменяем значение</a></li>
15
<li><a>Изменяем значение</a></li>
16
</ul><ul><li><a>Методы для работы со словарями</a></li>
16
</ul><ul><li><a>Методы для работы со словарями</a></li>
17
</ul><ul><li><a>update()</a></li>
17
</ul><ul><li><a>update()</a></li>
18
<li><a>get()</a></li>
18
<li><a>get()</a></li>
19
<li><a>pop()</a></li>
19
<li><a>pop()</a></li>
20
<li><a>keys()</a></li>
20
<li><a>keys()</a></li>
21
<li><a>values()</a></li>
21
<li><a>values()</a></li>
22
<li><a>items()</a></li>
22
<li><a>items()</a></li>
23
</ul><ul><li><a>Шпаргалка по синтаксису и методам</a></li>
23
</ul><ul><li><a>Шпаргалка по синтаксису и методам</a></li>
24
</ul><p>Словарь в языках программирования - это что-то вроде телефонной книги, где под каждым номером скрывается какой-то человек.</p>
24
</ul><p>Словарь в языках программирования - это что-то вроде телефонной книги, где под каждым номером скрывается какой-то человек.</p>
25
<p>Только на языке разработчиков номера называют ключами, а людей, которым они принадлежат, - значениями. Вот как это можно представить в виде таблицы:</p>
25
<p>Только на языке разработчиков номера называют ключами, а людей, которым они принадлежат, - значениями. Вот как это можно представить в виде таблицы:</p>
26
КлючЗначение8 (984) 123-53-11Дизайнер Валера8 (934) 256-32-54Менеджер Егор (не отвечать)<p>При этом ключи в словарях уникальны, а значения могут повторяться. Условно говоря, дизайнеру Валере может принадлежать сколько угодно номеров - но у каждого номера может быть только один владелец.</p>
26
КлючЗначение8 (984) 123-53-11Дизайнер Валера8 (934) 256-32-54Менеджер Егор (не отвечать)<p>При этом ключи в словарях уникальны, а значения могут повторяться. Условно говоря, дизайнеру Валере может принадлежать сколько угодно номеров - но у каждого номера может быть только один владелец.</p>
27
<p>Мы привели пример с телефонной книгой, но вы можете хранить в словаре всё что угодно: названия песен, имена покупателей, товары в интернет-магазине и так далее. При этом стоит помнить важное правило:</p>
27
<p>Мы привели пример с телефонной книгой, но вы можете хранить в словаре всё что угодно: названия песен, имена покупателей, товары в интернет-магазине и так далее. При этом стоит помнить важное правило:</p>
28
<p>Ключами могут быть строки, числа (целые и дробные) и кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В значения можно "положить" любые типы данных - и даже новые словари.</p>
28
<p>Ключами могут быть строки, числа (целые и дробные) и кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В значения можно "положить" любые типы данных - и даже новые словари.</p>
29
<p>Например, давайте в качестве ключа укажем название книги, а значением сделаем её автора.</p>
29
<p>Например, давайте в качестве ключа укажем название книги, а значением сделаем её автора.</p>
30
КлючЗначение"Гарри Поттер и философский камень"Джоан Роулинг"Убить пересмешника"Харпер Ли"Грокаем алгоритмы"Адитья Бхаргава<p>Теперь, если у нас есть название книги, мы можем быстро найти её автора. Этим словари и удобны: знаем ключ - моментально получаем значение.</p>
30
КлючЗначение"Гарри Поттер и философский камень"Джоан Роулинг"Убить пересмешника"Харпер Ли"Грокаем алгоритмы"Адитья Бхаргава<p>Теперь, если у нас есть название книги, мы можем быстро найти её автора. Этим словари и удобны: знаем ключ - моментально получаем значение.</p>
31
<p><strong>? Словарь - это неупорядоченная структура данных.</strong>Это значит, что все пары "ключ - значение" хранятся в произвольном порядке. Идея в том, что нам неважно, где находится элемент: в начале, в серединие или в конце. Важно то, что он лежит где-то внутри и мы можем при случае его достать.</p>
31
<p><strong>? Словарь - это неупорядоченная структура данных.</strong>Это значит, что все пары "ключ - значение" хранятся в произвольном порядке. Идея в том, что нам неважно, где находится элемент: в начале, в серединие или в конце. Важно то, что он лежит где-то внутри и мы можем при случае его достать.</p>
32
<p>Пример упорядоченной структуры - это список. Там у всех элементов есть свои индексы, благодаря которым их можно отсортировать как душе угодно. Если хотите больше знать о списках, читайте<a>другую нашу статью</a>. А мы пойдём дальше - создадим наш первый словарь.</p>
32
<p>Пример упорядоченной структуры - это список. Там у всех элементов есть свои индексы, благодаря которым их можно отсортировать как душе угодно. Если хотите больше знать о списках, читайте<a>другую нашу статью</a>. А мы пойдём дальше - создадим наш первый словарь.</p>
33
<p>Словари в Python оформляются фигурными скобками. Внутри них находятся пары "ключ - значение". Первым пишется ключ, а затем, через двоеточие, - значение. Сами пары отделяются друг от друга запятыми.</p>
33
<p>Словари в Python оформляются фигурными скобками. Внутри них находятся пары "ключ - значение". Первым пишется ключ, а затем, через двоеточие, - значение. Сами пары отделяются друг от друга запятыми.</p>
34
books = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' }<p>Если вместо значений не указать ничего, язык автоматически создаст<a>множество</a>(а не словарь), где будут только ключи:</p>
34
books = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' }<p>Если вместо значений не указать ничего, язык автоматически создаст<a>множество</a>(а не словарь), где будут только ключи:</p>
35
books = { 'Гарри Поттер и философский камень', 'Убить пересмешника' }<p>Выведем на экран содержимое словаря с помощью функции print:</p>
35
books = { 'Гарри Поттер и философский камень', 'Убить пересмешника' }<p>Выведем на экран содержимое словаря с помощью функции print:</p>
36
print(books) > {'Гарри Поттер и философский камень', 'Убить пересмешника'}<p>Результат:</p>
36
print(books) > {'Гарри Поттер и философский камень', 'Убить пересмешника'}<p>Результат:</p>
37
{'Гарри Поттер и философский камень', 'Убить пересмешника'}<p>Теперь попробуем создать и вывести полноценный словарь:</p>
37
{'Гарри Поттер и философский камень', 'Убить пересмешника'}<p>Теперь попробуем создать и вывести полноценный словарь:</p>
38
dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}<p>Результат:</p>
38
dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}<p>Результат:</p>
39
{'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}<p>Бинго!</p>
39
{'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}<p>Бинго!</p>
40
<p>Мало просто создать словарь - иногда нам нужно взаимодействовать с отдельными его элементами. Разберёмся с базовыми операциями.</p>
40
<p>Мало просто создать словарь - иногда нам нужно взаимодействовать с отдельными его элементами. Разберёмся с базовыми операциями.</p>
41
<p>Если нам известен ключ, можно быстро извлечь из словаря его значение - для этого используйте квадратные скобки.</p>
41
<p>Если нам известен ключ, можно быстро извлечь из словаря его значение - для этого используйте квадратные скобки.</p>
42
# Создаём словарь dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } # В квадратных скобках указываем значение harryPotterAuthor = dict['Гарри Поттер и философский камень'] print(harryPotterAuthor) # На выходе получаем значение > Джоан Роулинг<p>Если указать неправильный ключ, мы получим ошибку:</p>
42
# Создаём словарь dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } # В квадратных скобках указываем значение harryPotterAuthor = dict['Гарри Поттер и философский камень'] print(harryPotterAuthor) # На выходе получаем значение > Джоан Роулинг<p>Если указать неправильный ключ, мы получим ошибку:</p>
43
harryPotterAuthor = dict['Гарри Поттер и драгоценный камень'] print(harryPotterAuthor) > ERROR! Traceback (most recent call last): File "<string>", line 6, in <module> KeyError: 'Гарри Поттер и драгоценный камень'<p>Ошибка говорит нам, что по заданному ключу ничего не нашлось.</p>
43
harryPotterAuthor = dict['Гарри Поттер и драгоценный камень'] print(harryPotterAuthor) > ERROR! Traceback (most recent call last): File "<string>", line 6, in <module> KeyError: 'Гарри Поттер и драгоценный камень'<p>Ошибка говорит нам, что по заданному ключу ничего не нашлось.</p>
44
<p>Теперь попробуем добавить в наш словарь с книгами ещё одну запись. Чтобы это сделать, в квадратных скобках указываем ключ, а потом, через знак равенства, добавляем значение.</p>
44
<p>Теперь попробуем добавить в наш словарь с книгами ещё одну запись. Чтобы это сделать, в квадратных скобках указываем ключ, а потом, через знак равенства, добавляем значение.</p>
45
dict['Преступление и наказание'] = 'Фёдор Достоевский'<p>Пробуем вывести содержимое словаря на экран - видим, что новая запись добавилась в самом конце.</p>
45
dict['Преступление и наказание'] = 'Фёдор Достоевский'<p>Пробуем вывести содержимое словаря на экран - видим, что новая запись добавилась в самом конце.</p>
46
print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский'}<p>Готово!</p>
46
print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский'}<p>Готово!</p>
47
<p>Чтобы удалить элемент из словаря, используют команду del. При этом нам достаточно ввести только ключ, а значение удалится вместе с ним.</p>
47
<p>Чтобы удалить элемент из словаря, используют команду del. При этом нам достаточно ввести только ключ, а значение удалится вместе с ним.</p>
48
del dict['Убить пересмешника'] print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг'}<p>Синтаксис немного необычный: мы пишем команду del перед тем, как обратиться к словарю. Но всё прекрасно работает, мы проверили :)</p>
48
del dict['Убить пересмешника'] print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг'}<p>Синтаксис немного необычный: мы пишем команду del перед тем, как обратиться к словарю. Но всё прекрасно работает, мы проверили :)</p>
49
<p>Здесь всё просто: в квадратных скобках пишем уже существующий ключ, а через знак равенства указываем новое значение.</p>
49
<p>Здесь всё просто: в квадратных скобках пишем уже существующий ключ, а через знак равенства указываем новое значение.</p>
50
dict['Гарри Поттер и философский камень'] = 'Михаил Лермонтов'<p>Выводим в консоль - видим, что значение первой пары поменялось.</p>
50
dict['Гарри Поттер и философский камень'] = 'Михаил Лермонтов'<p>Выводим в консоль - видим, что значение первой пары поменялось.</p>
51
print(dict) > {'Гарри Поттер и философский камень': 'Михаил Лермонтов', 'Убить пересмешника': 'Харпер Ли'}<p><strong>Важное замечание.</strong>Если указать неправильный ключ, то мы вместо обращения к уже существующей паре создадим новую:</p>
51
print(dict) > {'Гарри Поттер и философский камень': 'Михаил Лермонтов', 'Убить пересмешника': 'Харпер Ли'}<p><strong>Важное замечание.</strong>Если указать неправильный ключ, то мы вместо обращения к уже существующей паре создадим новую:</p>
52
dict['Барри Воттер и философский камень'] = 'Михаил Лермонтов' print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Барри Воттер и философский камень': 'Михаил Лермонтов'}<p>Чтобы избежать таких ситуаций, можно использовать безопасный метод get(), о котором мы поговорим в следующем разделе.</p>
52
dict['Барри Воттер и философский камень'] = 'Михаил Лермонтов' print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Барри Воттер и философский камень': 'Михаил Лермонтов'}<p>Чтобы избежать таких ситуаций, можно использовать безопасный метод get(), о котором мы поговорим в следующем разделе.</p>
53
<p>Для словарей создали много полезных методов, которые облегчают привычные операции - например, можно одной функцией добавить в словарь несколько элементов или предусмотреть обработку ошибок.</p>
53
<p>Для словарей создали много полезных методов, которые облегчают привычные операции - например, можно одной функцией добавить в словарь несколько элементов или предусмотреть обработку ошибок.</p>
54
<p><strong>Что делает:</strong>добавляет в словарь одну или сразу несколько пар "ключ - значение".</p>
54
<p><strong>Что делает:</strong>добавляет в словарь одну или сразу несколько пар "ключ - значение".</p>
55
<p><strong>Как использовать:</strong>объявляем метод update(), внутри которого создаём новый словарь из элементов, которыми хотим дополнить существующий.</p>
55
<p><strong>Как использовать:</strong>объявляем метод update(), внутри которого создаём новый словарь из элементов, которыми хотим дополнить существующий.</p>
56
dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } dict.update({ 'Преступление и наказание' : 'Фёдор Достоевский', 'Чемодан' : 'Сергей Довлатов' }) print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский', 'Чемодан': 'Сергей Довлатов'}<p><strong>Что делает:</strong>возвращает значение из словаря по ключу - или None, если такого ключа не существует.</p>
56
dict = { 'Гарри Поттер и философский камень' : 'Джоан Роулинг', 'Убить пересмешника' : 'Харпер Ли' } dict.update({ 'Преступление и наказание' : 'Фёдор Достоевский', 'Чемодан' : 'Сергей Довлатов' }) print(dict) > {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский', 'Чемодан': 'Сергей Довлатов'}<p><strong>Что делает:</strong>возвращает значение из словаря по ключу - или None, если такого ключа не существует.</p>
57
harryPotterAuthor = dict.get('Гарри Поттер и философский камень') print(harryPotterAuthor) > Джоан Роулинг<p>Попробуем передать ключ, которого нет в словаре:</p>
57
harryPotterAuthor = dict.get('Гарри Поттер и философский камень') print(harryPotterAuthor) > Джоан Роулинг<p>Попробуем передать ключ, которого нет в словаре:</p>
58
harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России') print(harryPotterAuthor) > None<p>? У этого метода есть тайный козырь в рукаве. Вместо сухого и формального None он может вывести любое значение, которое вы захотите, - например, сообщение об ошибке. Для этого надо прописать нужное значение вторым аргументом. Мы решили добавить строчку с ошибкой:</p>
58
harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России') print(harryPotterAuthor) > None<p>? У этого метода есть тайный козырь в рукаве. Вместо сухого и формального None он может вывести любое значение, которое вы захотите, - например, сообщение об ошибке. Для этого надо прописать нужное значение вторым аргументом. Мы решили добавить строчку с ошибкой:</p>
59
harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России', 'Такого ключа нет') print(harryPotterAuthor) > Такого ключа нет<p>В этом состоит главное преимущество метода get() перед обычными квадратными скобками - для обработки ошибок можно не писать объёмные конструкции try/except, а ограничиться всего одной аккуратной строчкой.</p>
59
harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России', 'Такого ключа нет') print(harryPotterAuthor) > Такого ключа нет<p>В этом состоит главное преимущество метода get() перед обычными квадратными скобками - для обработки ошибок можно не писать объёмные конструкции try/except, а ограничиться всего одной аккуратной строчкой.</p>
60
<p><strong>Что делает:</strong>удаляет элемент из словаря по ключу.</p>
60
<p><strong>Что делает:</strong>удаляет элемент из словаря по ключу.</p>
61
harryPotterAuthor = dict.pop('Гарри Поттер и философский камень') print(harryPotterAuthor) > Джоан Роулинг print(dict) > {'Убить пересмешника': 'Харпер Ли'}<p><strong>Что делает:</strong>возвращает все ключи из словаря - но без значений.</p>
61
harryPotterAuthor = dict.pop('Гарри Поттер и философский камень') print(harryPotterAuthor) > Джоан Роулинг print(dict) > {'Убить пересмешника': 'Харпер Ли'}<p><strong>Что делает:</strong>возвращает все ключи из словаря - но без значений.</p>
62
dictKeys = dict.keys() print(dictKeys) > ['Гарри Поттер и философский камень', 'Убить пересмешника']<p><strong>Что делает:</strong>возвращает все значения из словаря - но без ключей.</p>
62
dictKeys = dict.keys() print(dictKeys) > ['Гарри Поттер и философский камень', 'Убить пересмешника']<p><strong>Что делает:</strong>возвращает все значения из словаря - но без ключей.</p>
63
dictValues = dict.values() print(dictValues) > ['Джоан Роулинг', 'Харпер Ли']<p><strong>Что делает:</strong>возвращает все пары "ключ - значение".</p>
63
dictValues = dict.values() print(dictValues) > ['Джоан Роулинг', 'Харпер Ли']<p><strong>Что делает:</strong>возвращает все пары "ключ - значение".</p>
64
dictItems = dict.items() print(dictItems) > [('Гарри Поттер и философский камень', 'Джоан Роулинг'), ('Убить пересмешника', 'Харпер Ли')]<p>Лучше не заучивать голую теорию, а сразу отрабатывать знания на практике. Начать можно, например, с бесплатных упражнений на <a>w3schools.com</a>. А чтобы быстро находить нужный метод и не ходить каждый раз в гугл, можете сохранить себе<a>шпаргалку по ссылке</a>или таблицу ниже.</p>
64
dictItems = dict.items() print(dictItems) > [('Гарри Поттер и философский камень', 'Джоан Роулинг'), ('Убить пересмешника', 'Харпер Ли')]<p>Лучше не заучивать голую теорию, а сразу отрабатывать знания на практике. Начать можно, например, с бесплатных упражнений на <a>w3schools.com</a>. А чтобы быстро находить нужный метод и не ходить каждый раз в гугл, можете сохранить себе<a>шпаргалку по ссылке</a>или таблицу ниже.</p>
65
Метод<strong>Что делает</strong>clear()Удаляет все элементы из словаряcopy()Создаёт копию словаряupdate()Добавляет в словарь одну или несколько пар "ключ - значение"pop()Удаляет элемент из словаря по ключуkeys()Возвращает список ключей из словаряvalues()Возвращает список значений из словаряitems()Возвращает все пары "ключ - значение"popitem()Удаляет последнюю добавленную пару "ключ - значение"get()Возвращает значение из словаря по ключу - или None, если такого ключа не существует. Можно указать своё значение в качестве второго аргументаsetdefault()Возвращает значение указанного ключа. Если ключа не существует, создаёт его и добавляет в словарь со значением None или тем, что вы добавите в качестве второго аргумента<p>Python для всех</p>
65
Метод<strong>Что делает</strong>clear()Удаляет все элементы из словаряcopy()Создаёт копию словаряupdate()Добавляет в словарь одну или несколько пар "ключ - значение"pop()Удаляет элемент из словаря по ключуkeys()Возвращает список ключей из словаряvalues()Возвращает список значений из словаряitems()Возвращает все пары "ключ - значение"popitem()Удаляет последнюю добавленную пару "ключ - значение"get()Возвращает значение из словаря по ключу - или None, если такого ключа не существует. Можно указать своё значение в качестве второго аргументаsetdefault()Возвращает значение указанного ключа. Если ключа не существует, создаёт его и добавляет в словарь со значением None или тем, что вы добавите в качестве второго аргумента<p>Python для всех</p>
66
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
66
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
67
<p><a>Пройти бесплатно</a></p>
67
<p><a>Пройти бесплатно</a></p>
68
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
68
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>