Словари (dict) – это одна из наиболее часто используемых структур данных, позволяющая хранить объекты, для доступа к которым используется ключ. В этом уроке будут рассмотрены операции создания, удаления, работы со словарями и их методы.
Что такое словарь (dict) в Python?
Словарь (dict) представляет собой структуру данных (которая ещё называется ассоциативный массив), предназначенную для хранения произвольных объектов с доступом по ключу. Данные в словаре хранятся в формате ключ – значение. Если вспомнить такую структуру как список, то доступ к его элементам осуществляется по индексу, который представляет собой целое неотрицательное число, причем мы сами, непосредственно, не участвуем в его создании (индекса). В словаре аналогом индекса является ключ, при этом ответственность за его формирование ложится на программиста.
Создание, изменение, удаление словарей и работа с его элементами
Создание словаря
Пустой словарь можно создать, используя функцию dict(), либо просто указав пустые фигурные скобки.
>>> d1 = dict() >>> print(type(d1)) <class 'dict'> >>> d2 = {} >>> print(type(d2)) <class 'dict'>
Если необходимо создать словарь с заранее подготовленным набором данных, то можно использовать один из перечисленных выше подходов, но с перечислением групп ключ-значение.
>>> d1 = dict(Ivan="manager", Mark="worker") >>> print(d1) {'Mark': 'worker', 'Ivan': 'manager'} >>> d2 = {"A1":"123", "A2":"456"} >>> print(d2) {'A2': '456', 'A1': '123'}
Добавление и удаление элемента
Чтобы добавить элемент в словарь нужно указать новый ключ и значение.
>>> d1 = {"Russia":"Moscow", "USA":"Washington"} >>> d1["China"]="Beijing" >>> print(d1) {'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}
Для удаления элемента из словаря можно воспользоваться командой del.
>>> d2 = {"A1":"123", "A2":"456"} >>> del d2["A1"] >>> print(d2) {'A2': '456'}
Работа со словарем
Проверка наличия ключа в словаре производится с помощью оператора in.
>>> d2 = {"A1":"123", "A2":"456"} >>> "A1" in d2 True >>> "A3" in d2 False
Доступ к элементу словаря, осуществляется как же как доступ к элементу списка, только в качестве индекса указывается ключ.
>>> d1 = {"Russia":"Moscow", "USA":"Washington"} >>> d1["Russia"] 'Moscow'
Методы словарей
У словарей доступен следующий набор методов.
clear()
Удаляет все элементы словаря.
>>> d2 = {"A1":"123", "A2":"456"} >>> print(d2) {'A2': '456', 'A1': '123'} >>> d2.clear() >>> print(d2) {}
copy()
Создается новая копия словаря.
>>> d2 = {"A1":"123", "A2":"456"} >>> d3 = d2.copy() >>> print(d3) {'A1': '123', 'A2': '456'} >>> d3["A1"]="789" >>> print(d2) {'A2': '456', 'A1': '123'} >>> print(d3) {'A1': '789', 'A2': '456'}
fromkeys(seq[, value])
Создает новый словарь с ключами из seq и значениями из value. По умолчанию value присваивается значение None.
get(key)
Возвращает значение из словаря по ключу key.
>>> d = {"A1":"123", "A2":"456"} >>> d.get("A1") '123'
items()
Возвращает элементы словаря (ключ, значение) в отформатированном виде.
>>> d = {"A1":"123", "A2":"456"} >>> d.items() dict_items([('A2', '456'), ('A1', '123')])
keys()
Возвращает ключи словаря.
>>> d = {"A1":"123", "A2":"456"} >>> d.keys() dict_keys(['A2', 'A1'])
pop(key[, default])
Если ключ key есть в словаре, то данный элемент удаляется из словаря и возвращается значение по этому ключу, иначе будет возвращено значение default. Если default не указан и запрашиваемый ключ отсутствует в словаре, то будет вызвано исключение KeyError.
>>> d = {"A1":"123", "A2":"456"} >>> d.pop("A1") '123' >>> print(d) {'A2': '456'}
popitem()
Удаляет и возвращает пару (ключ, значение) из словаря. Если словарь пуст, то будет вызвано исключение KeyError.
>>> d = {"A1":"123", "A2":"456"} >>> d.popitem() ('A2', '456') >>> print(d) {'A1': '123'}
setdefault(key[, default])
Если ключ key есть в словаре, то возвращается значение по ключу. Если такого ключа нет, то в словарь вставляется элемент с ключом key и значением default, если default не определен, то по умолчанию присваивается None.
>>> d = {"A1":"123", "A2":"456"} >>> d.setdefault("A3", "777") '777' >>> print(d) {'A2': '456', 'A3': '777', 'A1': '123'} >>> d.setdefault("A1") '123' >>> print(d) {'A2': '456', 'A3': '777', 'A1': '123'}
update([other])
Обновить словарь парами (key/value) из other, если ключи уже существуют, то обновить их значения.
>>> d = {"A1":"123", "A2":"456"} >>> d.update({"A1":"333", "A3":"789"}) >>> print(d) {'A2': '456', 'A3': '789', 'A1': '333'}
values()
Возвращает значения элементов словаря.
>>> d = {"A1":"123", "A2":"456"} >>> d.values() dict_values(['456', '123'])
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
<<< Python. Урок 8. Кортежи (tuple) Python. Урок 10. Функции в Python>>>
Здравствуйте, автор.
Небольшая неточность про индекс списка, который “представляет собой целое положительное число”.
Индекс списка начинается с нуля, поэтому правильно “представляет собой целое НЕОТРИЦАТЕЛЬНОЕ число”.
С уважением, Иван.
Добрый день!
Спасибо! Поправили)
А как же отрицательная индексация?
Подскажите. Почему удаляется вторая пара ключ, значение?
>>> d = {“A1″:”123”, “A2″:”456”}
>>> d.popitem()
(‘A2’, ‘456’)
>>> print(d)
{‘A1’: ‘123’}
Метод popitem() удаляет и возвращает пару (ключ, значение) из словаря в LIFO порядке. Т.е. по принципу “последний зашел – первый вышел”. В данном случае “последний зашел” – это про “A2″:”456”. ВАЖНО! В Python 3.7 LIFO порядок гарантируется, до версии 3.7 popitem() возвращал произвольную пару (ключ, значение).
Задана строка, в которой через запятую перечислены слова. Создать словарь, в котором ключами будут слова из строки, а значениями – текст “номер {номер-слова-в-строке} в строке”.
Например, ‘ten,one,five,two,three,four’ преобразовать в {‘three’: ‘номер 5 в строке’, ‘one’: ‘номер 2 в строке’, ‘ten’: ‘номер 1 в строке’, ‘two’: ‘номер 4 в строке’, ‘five’: ‘номер 3 в строке’, ‘four’: ‘номер 6 в строке’}.
Как вариант:
str = ‘ten, one, five, two, three, four’ # Создаем строку
str = str.split(sep=’,’) # Функция преобразования строки в список, где sep – разделитель элементов в нашей строке
d1 = {} # Создаем пустой словарь
for i in str: # Цикл перебора элементов в списке
—-d1[i]=f’номер {str.index(i)+1} в строке’ # В каждой итерации добавляем в словарь элемент списка в качестве ключа и
#f’номер {str.index(i) + 1} в строке’ в качестве значения для этого ключа, где str.index(i) – индекс добавляемого элемента
print(d1)
—- это 4 пробела
keys = ‘ten, one, five, two, three, four’ # Создаем строку
keys = keys.split(sep=’,’) # Функция преобразования строки в список, где sep – разделитель элементов в нашей строке
values = [‘номер {} в строке’.format(i) for i in range (1,len(keys)+1)] # Создаем список для значений словаря и вносим в него все необходимые значения, где len(keys) – кол-во элементов в списке keys
d1=dict(zip(keys, values)) # Создаем словарь и в него вносим поочередно ключи из списка keys и соответствующие им значения из values
print(d1)
А почему добавляет новый элемент в середину? какая тут вообще логика?
>>> d1 = {“Russia”:”Moscow”, “USA”:”Washington”}
>>> d1[“China”]=”Beijing”
>>> print(d1)
{‘Russia’: ‘Moscow’, ‘China’: ‘Beijing’, ‘USA’: ‘Washington’}