Словари
В языке программирования Python словари (тип dict ) представляют собой еще одну разновидность структур данных наряду со списками и кортежами. Словарь — это изменяемый (как список) неупорядоченный (в отличие от строк, списков и кортежей) набор элементов «ключ:значение».
«Неупорядоченный» – значит, что последовательность расположения пар не важна, в следствие чего обращение к элементам по индексам невозможно.
В других языках структуры, схожие со словарями, называются по-другому. Например, в Java подобный тип данных называется отображением.
Чтобы представление о словаре стало более понятным, проведем аналогию с обычным словарем, например, англо-русским. На каждое английское слово в таком словаре есть русское слово-перевод: cat – кошка, dog – собака, table – стол и т. д. Если англо-русский словарь описать с помощью Python, то английские слова можно сделать ключами, а русские – их значениями:
{'cat': 'кошка', 'dog': 'собака', 'bird': 'птица'>
Обратите внимание, что для определения словаря используются фигурные скобки. Синтаксис словаря на Питоне описывается такой схемой:
В словаре доступ к значениям осуществляется не по индексам, а по ключам, которые заключаются в квадратные скобки (по аналогии с индексами списков):
>>> a['cat'] 'кошка' >>> a['bird'] 'птица'
Словари, как и списки, являются изменяемым типом данных: позволительно изменять, добавлять и удалять элементы (пары «ключ:значение»). Изначально словарь можно создать пустым (например, d = <> ) и потом заполнить его элементами. Добавление и изменение имеет одинаковый синтаксис: словарь[ключ] = значение . Ключ может быть как уже существующим (тогда происходит изменение значения), так и новым (происходит добавление элемента словаря). Удаление элемента осуществляется с помощью встроенной оператора del языка Python.
>>> a = <> >>> a[1] = 2.34 >>> a[2] = 4.88 >>> a >>> a[1] = 3.01 >>> a >>> del a[2] >>> a
В словаре не может быть двух элементов с одинаковыми ключами. Однако могут быть одинаковые значения у разных ключей.
Ключом может быть любой неизменяемый тип данных. Значением – любой тип данных. Значения словарей вполне могут быть структурами, например, другими словарями или списками.
>>> nums = >>> person1 = >>> person1['data'][0] 4
Перебор элементов словаря в цикле for
Элементы словаря перебираются в цикле for также, как элементы других сложных объектов. Однако «по-умолчанию» извлекаются только ключи:
>>> nums >>> for i in nums: . print(i) . 1 2 3
Но по ключам всегда можно получить значения:
>>> for i in nums: . print(nums[i]) . one two three
С другой стороны у словаря как класса есть метод items() , который создает особую структуру, состоящую из кортежей. Каждый кортеж включает ключ и значение:
>>> n = nums.items() >>> n dict_items([(1, 'one'), (2, 'two'), (3, 'three')])
В цикле for можно распаковывать кортежи, таким образом сразу извлекая как ключ, так и его значение:
>>> for key, value in nums.items(): . print(key, 'is', value) . 1 is one 2 is two 3 is three
Методы словаря keys() и values() позволяют получить отдельно перечни ключей и значений. Так что если, например, надо перебрать только значения или только ключи, лучше воспользоваться одним из этих методов:
>>> v_nums = [] >>> for v in nums.values(): . v_nums.append(v) . >>> v_nums ['one', 'two', 'three']
Методы словаря
Кроме рассмотренных выше трех методов items() , keys() и values() словари обладают еще восемью. Это методы clear() , copy() , fromkeys() , get() , pop() , popitem() , setdefault() , update() .
Метод clear() удаляет все элементы словаря, но не удаляет сам словарь. В итоге остается пустой словарь:
>>> nums >>> nums.clear() >>> nums <>
Словарь – это изменяемый тип данных. Следовательно, как и список он передается в функцию по ссылке. Поэтому иногда, чтобы избежать нежелательного изменения глобального словаря его копируют. Это делают и с другими целями.
>>> n1 = >>> n2 = n1 >>> n3 = n1.copy() >>> n2[‘c’] = 3 >>> n1 >>> n2 >>> n3
Метод fromkeys() позволяет создать словарь из списка, элементы которого становятся ключами. Применять метод можно как классу dict , так и к его объектам:
>>> a = [1, 2, 3] >>> c = dict.fromkeys(a) >>> c >>> d = dict.fromkeys(a, 10) >>> d
Метод get() позволяет получить элемент по его ключу:
>>> nums.get(1) 'one'
Метод pop() удаляет из словаря элемент по указанному ключу и возвращает значение удаленной пары. Метод popitem() не принимает аргумента, удаляет элемент по принципу «последним вошел, первым вышел» и возвращает его в программу в виде кортежа (ключ, значение) .
>>> nums = >>> nums.pop(1) ‘one’ >>> nums >>> nums.popitem() (3, ‘three’) >>> nums
С помощью setdefault() можно добавить элемент в словарь:
>>> nums.setdefault(4, ‘four’) ‘four’ >>> nums
Равносильно nums[4] = ‘four’ , если элемент с ключом 4 отсутствует в словаре. Если он уже есть, то nums[4] = ‘four’ перезапишет старое значение, setdefault() – нет.
С помощью update() можно добавить в словарь другой словарь:
>>> nums.update() >>> nums
Также метод обновляет значения существующих ключей. Включает еще ряд особенностей.
Практическая работа
- Создайте словарь, связав его с переменной school , и наполните данными, которые бы отражали количество учащихся в разных классах (1а, 1б, 2б, 6а, 7в и т. п.). Внесите изменения в словарь согласно следующему: а) в одном из классов изменилось количество учащихся, б) в школе появился новый класс, с) в школе был расформирован (удален) другой класс. Вычислите общее количество учащихся в школе.
- Напишите функцию, которая принимает один словарь, и возвращает другой, в котором ключами являются значения из первого словаря, а значениями – соответствующие им ключи. Создайте словарь, передайте его в функцию. Выведите на экран исходный и «перевернутый» словари.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Словари
Словари — еще один встроенный тип данных для хранения объектов. Они используются для связывания одного объекта, называемого ключом, с другим, называемым значением. Такое связывание называется отображением. Результатом отображения будет пара ключ-значение. Пары ключ-значение добавляются в словарь. Затем вы можете найти в словаре ключ и получить соответствующее ему значение. Однако нельзя, наоборот, использовать значение для нахождения ключа.
Словари, как и списки, изменяемы. То есть, в них можно добавлять новые пары ключ-значение. Их полезность заключается в связях между ключами и значениями — существует множество ситуаций, в которых вам потребуется сохранять данные попарно. Например, в словаре можно сохранить информацию о телефонных номерах ваших друзей:
phones = "Иван": "+7123456789", "Василий": "+37520123456">print(phones)
При создании словаря нужно использовать фигурные скобки, отделять ключ от значения двоеточием, а пары ключ-значение разделять запятыми. В отличие от кортежей, если у вас есть только одна пара ключ-значение, запятая после нее не нужна.
Как только вы создали словарь, можете добавлять в него пары ключ-значение, используя синтаксис имя\_словаря[ключ] = значение , а также искать значение при помощи ключа, используя синтаксис имя_словаря[ключ] .
phones = "Иван": "+7123456789", "Василий": "+37520123456">phones['Григорий'] = 1234567890print(phones['Иван'])
Значением в словаре может быть любой объект. В предыдущем примере первые два значения были строками, а последнее значение, 1234567890 , — целым числом.
В отличие от значения словаря, ключ словаря должен быть неизменяемым. Ключом словаря может быть строка или кортеж, но не список или словарь. Для определения того, есть ли ключ в словаре, используйте ключевое слово in , а not in — для проверки отсутствия ключа.
phones = "Иван": "+7123456789", "Василий": "+37520123456">print("Василий" in phones) # True
Из словаря можно удалить пару ключ-значение с помощью ключевого слова del .
phones = "Иван": "+7123456789", "Василий": "+37520123456">del phones["Василий"]
Вы можете сохранять контейнеры в других контейнерах. Например, можно хранить списки внутри списка.
music = "rap": ["Баста", "Кравц", "Злой Дух"], "rock": ["Наутилус Помпилиус", "Кино", "Ария"], "djs": ["Paul Oakenfold", "Tiesto"]>
В этом примере словарь music имеет три ключа, каждый из которых является списком: К этим спискам можно получить доступ с помощью соответствующих ключей
music = "rap": ["Баста", "Кравц", "Злой Дух"], "rock": ["Наутилус Помпилиус", "Кино", "Ария"], "djs": ["Paul Oakenfold", "Tiesto"]>print(music['rap']) # ['Баста', 'Кравц', 'Злой Дух']print(music['rock'][-1]) # Ария
Хотите выучить Python на практике?
Синтаксис — Python: Cловари и множества
Как и другие встроенные коллекции, словари поддерживаются языком и имеют собственный синтаксис для описания литералов. В этом уроке мы изучим этот синтаксис подробнее.
Литерал словаря записывается в фигурных скобках. Пары «ключ-значение» разделяются запятыми, а ключ отделяется от значения двоеточием:
dictionary = "foo": "bar", "baz": 42, "items": 1: "apple", 2: "orange", 100500: "lemon" >, True: "python", > dictionary # , True: 'python'>
В этом примере есть и ключи-строки, и ключи-числа, и вложенные словари. И конечно же, здесь есть переменные, которые могут выступать в роли значений и ключей:
key, val = 'x', 42 key: val> #
Доступ к элементам по ключу
Выше мы объявили словарь dictionary . Запросить у него значение по ключу можно так:
dictionary["baz"] # 42 dictionary["BANG"] # KeyError: 'BANG'
Ключа «BANG» в dictionary нет, поэтому возбудилось исключение KeyError — аналог IndexError для списков.
Проверить наличие ключа в словаре можно с помощью привычного оператора in :
"baz" in dictionary # True "BANG" in dictionary # False
Если вы захотите получить значение по ключу, которого может и не быть, можно сделать это так:
dictionary["BANG"] if "BANG" in dictionary else None
Подобный безопасный запрос элементов нужен довольно часто. Поэтому объект словаря имеет для этого специальный метод .get :
dictionary.get("baz") # 42 dictionary.get("BANG") # Вернет None dictionary.get("BANG", "no such key") # 'no such key'
Третий вызов метода показывает, как можно явно задать значение по умолчанию. Если его не указывать, метод вернет None при отсутствии значения по указанному ключу.
Итераторы keys , values и items
Если попробовать проитерировать словарь, то мы получим перечень ключей:
for k in "a": 1, "b": 2>: print(k) # => a # => b
Этого же результата можно добиться и более явно. Для этого нужно вызвать метод .keys() :
list("a": 1, "b": 2>.keys()) # ['a', 'b']
Чтобы получить значения, нужно вызвать метод .values() :
list("a": 1, "b": 2>.values()) # [1, 2]
Чтобы получить одновременно и ключи, и соответствующие значения, можно вызвать метод .items() :
for k, v in "a": 1, "b": 2>.items(): print(k, " ">, v) # => a = 1 # => b = 2
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как проверить значение ключа в словаре python

34. Словари Python. Операции и методы словаря

35. 4 Ситуации, где полезно использовать словарь

36. Как отсортировать словарь в Python

37. Кортежи (tuple). Операции и методы кортежей

38. Функции (def). Определение и вызов функции

39. Зачем нужны функции в программировании

40. Возвращаемое значение функции. Оператор return

41. Область видимости: локальная, глобальная и встроенная.

42. Вложенные функции Python
Словари (dict)
В Python имеется еще один составной тип данных, называемый словарем, который похож на список. Словарь (dict) — неупорядоченная коллекция произвольных объектов с доступом по ключу. Словарь более известен как ассоциативный массив. Словарь состоит из набора пар «Ключ-Значение». И в отличии от списка, где к каждому элементу можно обратиться по его порядковому номеру(индексу), в словаре обращение к элементу происходит по ключу.
Создание словаря
Вы можете определить словарь, включив в фигурные скобки список пар «Ключ-значение», разделенных запятыми. Двоеточие (:) отделяет каждый ключ от связанного с ним значения:
Пример: мы можем связать (ассоциировать) названия футбольной команды с городом, где она основана:
teams =
Доступ к значениям словаря
Для получения значения внутри пары вы должны обратиться по ключу dict[key]
>>> teams['PSG'] 'Paris' >>> teams['Arsenal'] 'London'
Если попытаетесь обратиться к ключу, которого нет, получится исключение типа KeyError
>>> teams['Chelsea'] Traceback (most recent call last): File "", line 1, in teams['Chelsea'] KeyError: 'Chelsea'
Добавление нового элемента
Чтобы добавить новое значение в словарь, нужно обратиться по несуществующему ключу и присвоить в него значение
>>> teams >>> teams['Sporting'] = 'Lisbon' >>> teams
Изменение элемента
Чтобы изменить значение существующего ключа, нужно обратиться по этому ключу и присвоить новое значение
>>> teams >>> teams['Arsenal']='Лондон' >>> teams
Удаление элемента
Чтобы удалить элемент словаря, нужно воспользоваться командой del
>>> teams >>> del teams['Sporting'] >>> teams
Операции со словарем
Нахождение длины словаря
Чтобы найти длину словаря(количество пар «ключ-значение»), нужно воспользоваться функцией len()
>>> teams >>> len(teams) 3 >>> len(<>) 0 >>> len() 1
Проверка вхождения ключа в словарь
Для этого нужно воспользоваться командой in. Обратите внимание, что поиск происходит только среди ключей словаря
>>> teams >>> 'Bayern' in teams True >>> 'Munich' in teams False
Методы словаря
Метод .clear()
Полностью очищает словарь
>>> teams >>> teams.clear() >>> teams <>
Метод .get(key [,default])
Метод, который принимает обязательный параметр — значение ключа. В случае, если данный ключ имеется в словаре, возвращается его значение. В противном случае вернется None, либо значение default (если оно было передено)
>>> teams >>> teams.get('PSG') 'Paris' >>> teams.get('Porto') >>> print(teams.get('Porto')) None >>> teams.get('Porto','Not exist') 'Not exist' >>> teams.get('Porto',999) 999
Метод .setdefault(key [,default])
Метод, который принимает обязательный параметр — значение ключа. Возвращает значение ключа, но если его нет создает ключ с значением default (по умолчанию None).
>>> teams >>> teams.setdefault('PSG') 'Paris' >>> teams >>> teams.setdefault('Porto') >>> teams >>> teams.setdefault('Benfika','Lisbon') 'Lisbon' >>> teams
Метод .pop(key [,default])
Метод, который удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
>>> teams >>> print(teams.pop('Porto')) None >>> teams >>> teams.pop('Benfika','Hello') 'Lisbon' >>> teams >>> teams.pop("Chelsea") Traceback (most recent call last): File "", line 1, in teams.pop("Chelsea") KeyError: 'Chelsea' >>> teams.pop("Chelsea","Hello") 'Hello'
Метод .keys()
Метод, который возвращает коллекцию всех ключей в словаре
>>> teams >>> teams.keys() dict_keys(['Arsenal', 'Bayern', 'PSG'])
Метод .values()
Метод, который возвращает коллекцию всех значений в словаре
>>> teams >>> teams.values() dict_values(['Лондон', 'Munich', 'Paris'])
Метод .items()
Метод, который возвращает коллекцию всех пар «ключ-значение»
>>> teams >>> teams.items() dict_items([('Arsenal', 'Лондон'), ('Bayern', 'Munich'), ('PSG', 'Paris')])
Обход элементов словаря в цикле for
При обходе элементов в переменной i по умолчанию будут сохранятся значения ключей
>>> teams >>> for i in teams: print(i) Arsenal Bayern PSG
Но, зная ключ, можно обратиться к значению этого ключа
>>> for i in teams: print(i, teams[i]) Arsenal Лондон Bayern Munich PSG Paris
Обойти только значения словаря можно при использовании метода .values()
>>> for i in teams.values(): print(i) Лондон Munich Paris
При помощи метода .items() можно обходить элементы, получая сразу и ключ и значение
>>> for item in teams.items(): key, value = item[0], item[1] print(key, value) Arsenal Лондон Bayern Munich PSG Paris
>>> for key, value in teams.items(): print(key, value) Arsenal Лондон Bayern Munich PSG Paris