Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

24. Словари в Python

В предыдущем уроке мы познакомились со списками в языке Python. Но они не всегда могут помочь. Например, когда у нас имеются данные в виде ключ/значение, удобнее использовать словари.

Словари в Python напоминают ассоциативные массивы. В них так же уникальному значению ключа соответствует произвольное значение. В языке С++ ему аналогичен контейнер map. Как объявить словарь в Python? Он объявляется в фигурных скобках:

Пример
person = {"firstname": "Ivan",
"lastname": "Ivanov",
"age": 30}

print(person["firstname"])

Сначала записывается ключ, а затем, через двоеточие, указывается значение. И ключ, и значение могут быть любым объектом языка Python. Кстати, пары ключ/значение необязательно писать на разных строках:

Пример
person = {"firstname": "Ivan", "lastname": "Ivanov", "age": 30}           

Как видите, такой способ записи словаря менее читабельный.

Обратите внимание на обязательное разделение пар запятыми. Причем запятую после последней пары можно как ставить, так и опустить – интерпретатор Python ее проигнорирует.

Как вы помните, в списках элементы хранятся в порядке добавления. В свою очередь, словарь пренебрегает порядком хранения элементов.

Чтобы обратиться к элементу из списка, вам необходимо указать индекс элемента в квадратных скобках. В словаре, вместо индекса, задается ключ, например:

Пример
person["firstname"] # => Ivan           

Обращение по ключу позволяет быстро находить необходимую информацию, независимо от размера словаря. Это возможно благодаря хорошо оптимизированным алгоритмам.

Чтобы понять, как динамически добавлять элементы в словарь, рассмотрим следующий пример:

Пример
person = {"firstname": "Ivan",
"lastname": "Ivanov",
"age": 30,}
print(person)
person["id"] = 1;
print(person)

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

Допустим, нам необходимо посчитать количество определенных букв в заданной фразе:

Пример
word = "словарь - это не список"
letters = {"а": 0, "е": 0, "и": 0, "о": 0}

for letter in word:
if letter in letters:
letters[letter] = letters[letter] + 1

print(letters)

Сначала мы объявляем словарь, в котором инициализируем наши буквы (то есть присвоим ноль, чтобы избежать ошибок, о которых мы поговорим позже). Далее перебираем все буквы фразы, и если такая буква есть в нашем словаре, то увеличиваем ее значение на единицу. Но что если наш словарь пустой и нам необходимо подсчитать частоту каждого символа в строке? Если оставить все как есть, то наш код работать не будет. Чтобы это устранить, необходимо кое-что добавить:

Пример
word = "словарь - это не список"
letters = {}

for letter in word:
if letter in letters:
letters[letter] += 1
else:
letters[letter] = 1

print(letters)

Мы добавили ветку else, которая будет выполняться, если ключа letter нет в словаре и заменили строку, в которой увеличивалось значение на эквивалентную. Давайте еще более упростим наш код, используя оператор not in:

Пример
for letter in word:
if letter not in letters:
letters[letter] = 0
letters[letter] += 1

И это еще не все. Для таких случаев был специально придуман метод setdefault:

Пример
for letter in word:
letters.setdefault(letter, 0)
letters[letter] += 1

Из этого урока вы узнали, чем различаются словари и списки в Python, когда и что использовать. Так же вы познакомились с методом setdefault.

Похожие уроки и записи блога

Первое знакомство с PythonЗнакомство с Python
Типы данных в PythonЗнакомство с Python
Структуры данных в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Списки в PythonЗнакомство с Python
Погружение в PythonЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Условная инструкция if-elif-else в PythonЗнакомство с Python
Внутреннее устройство и сортировка словаря в PythonЗнакомство с Python
<
×
>
Раздел «Знакомство с Python»
1. УРОК: Первое знакомство с Python
2. ТЕСТ: Небольшой первый тест по Python
3. УРОК: Переменные и комментарии в Python
4. ТЕСТ: Тест по основным понятиям и работе с сайтом
Самые основы
5. УРОК: Погружение в Python
6. ТЕСТ: Второй вводный тест по Python
7. УРОК: Типы данных в Python
8. УРОК: Форматирование строк в Python
9. УРОК: Условная инструкция if-elif-else в Python
10. УРОК: Преобразование и проверка типов в Python
11. УРОК: Вызов методов цепочкой в Python
Циклы
12. УРОК: Первое знакомство с циклами в Python
13. ТЕСТ: Тест по циклам Python
Немного рандома
14. УРОК: Генерируем случайные числа на Python
15. ТЕСТ: Тест по модулю random Python
Структуры данных
16. УРОК: Структуры данных в Python
17. ТЕСТ: Тест по структурам Python
Списки
18. УРОК: Списки в Python
19. ТЕСТ: Тест по спискам Python
20. УРОК: Изменение списка на месте в Python
21. УРОК: Дополнительно про списки в Python
22. УРОК: Конкатенация и сортировка списков в Python
23. ТЕСТ: Заключительный тест по спискам в Python
Словари
УРОК 24. Словари в Python
Вы здесь
25. ТЕСТ: Тест по словарям Python
26. УРОК: Словари и списки: еще глубже
27. УРОК: Перебор элементов словаря в Python
28. УРОК: Внутреннее устройство и сортировка словаря в Python
29. УРОК: Методы словарей и функция len() в Python
30. ТЕСТ: Заключительный тест по словарям
Множества
31. УРОК: Множества в Python
32. УРОК: Методы и особенности множеств в Python
33. УРОК: Отношения между множествами и операции над ними
34. ТЕСТ: Тест по методам множеств в Python
35. ТЕСТ: Тест по операциям над множествами в Python
Кортежи
36. УРОК: Кортежи в Python
37. УРОК: Более подробно о кортежах в Python
38. ТЕСТ: Тест по кортежам в Python
Снова циклы и немного исключений
39. УРОК: Контроль хода выполнения программы в Python
40. УРОК: Цикл while в Python
41. УРОК: Операторы break, continue и pass в Python
42. УРОК: Циклы for/else и while/else в Python
43. УРОК: Обработка исключений (try/except) в Python
44. ТЕСТ: Тест по циклам и управляющим конструкциям
45. ТЕСТ: Тест по обработке исключений
Работаем с файлами
46. УРОК: Работа с файлами в Python
47. УРОК: Оператор with/as для работы с файлами в Python
48. ТЕСТ: Тест по работе с файлами в Python
Итераторы
49. УРОК: Итераторы в Python
50. УРОК: List/dict/set comprehensions (включения) в Python
51. ТЕСТ: Тест по включениям в Python
Функции
52. УРОК: Основы функций в Python
53. ТЕСТ: Тест по основам функций в Python
54. УРОК: Область видимости в Python
55. ТЕСТ: Тест по области видимости в Python
56. УРОК: Замыкания и оператор nonlocal в Python
57. ТЕСТ: Тест по замыканиям и nonlocal в Python
58. УРОК: Аргументы и параметры функций, операторы * и ** в Python
59. ТЕСТ: Тест по аргументам и параметрам функций в Python
60. ТЕСТ: Тест по операторам * и ** в Python
61. УРОК: Анонимные функции: выражения lambda
62. УРОК: Функциональное программирование: map, filter и reduce
63. ТЕСТ: Тест по парадигме функционального программирования
64. УРОК: Генераторы и оператор yield в Python
65. ТЕСТ: Тест по генераторным функциям и выражениям
Модули
66. УРОК: Модули в Python
67. УРОК: Написание модулей в Python
68. УРОК: Пакеты модулей в Python
69. УРОК: Еще о возможностях модулей в Python
70. ТЕСТ: Тест по модулям и пакетам в Python
Объектно-ориентированное программирование
71. УРОК: Основы объектно-ориентированного программирования (ООП) в Python
72. ТЕСТ: Тест по основам ООП в Python
73. УРОК: Основы написания классов в Python
74. УРОК: Продолжаем написание классов в Python
75. УРОК: Более глубокое изучение классов в Python
76. УРОК: Что дальше?
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно