Python: Dictionary (Словари)
Статья проплачена кошками — всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
Словарь (неупорядоченные коллекции из разных объектов с доступом по ключу) создаётся при помощи фигурных скобок, внутри которых указываются пары «ключ-значение» через запятые. Также можно создать пустой словарь и позже добавлять пары. В Python словарь определён в классе dict. Иногда используют термин ассоциативные массивы или хеш-таблицы.
catDictionary = {"key1": "Barsik", "key2": "Murzik", "key3": "Vaska"}
emptyDictionary = {}
Другие варианты создания словарей.
С помощью функции dict():
dictionary = dict(short='dict', long='dictionary')
print(dictionary) # {'short': 'dict', 'long': 'dictionary'}
numberDict = dict([(1, 3), (2, 9)])
print(numberDict) # {1: 3, 2: 9}
С помощью метода fromkeys():
noneDictionary = dict.fromkeys(['a', 'b']) print(noneDictionary) # {'a': None, 'b': None} fullDictionary = dict.fromkeys(['a', 'b'], 9) print(fullDictionary) # {'a': 9, 'b': 9}
И ключи и значения в одном словаре могут быть разных типов (строки, числа).
Ключи и значения могут выводиться в различном порядке, потому что словари, в отличие от списков, не упорядочены (не ранжированы). В словаре нет первого элемента, потому что нет какого-нибудь порядка расположения элементов.
Число пар в словаре можно получить через len.
print(len(catDictionary)) # 3
Доступ к значению можно получить через ключ, указанный в квадратных скобках. Если указать неправильный ключ, то вернётся ошибка.
print(catDictionary["key3"]) # Vaska
Также можно через метод get().
val = catDictionary.get("key2")
print(val) # Murzik
При не существующем ключе можно вернуть собственное сообщение.
val = catDictionary.get("key5", "That key is not found") print(val)
Проверить, есть ли проверяемый ключ в словаре можно через оператор in. В успешном случае возвращается True или 1, в противном случае возвращается False или 0.
print("key4" in catDictionary) # 0
print("key1" in catDictionary) # True
Получить все ключи можно через keys(). Метод возвращает значение типа dict_keys.
keys = catDictionary.keys() print(list(keys))
Получить все значения ключей можно через values(). Метод возвращает значение типа dict_values.
values = catDictionary.values() print(list(values)) # ['Murzik', 'Vaska', 'Barsik']
Получить все ключи со значениями можно через items().
items = catDictionary.items()
print(items)
# dict_items([('key2', 'Murzik'), ('key3', 'Vaska'), ('key1', 'Barsik')])
Чтобы обновить значение в словаре, нужно указать ключ и новое значение.
catDictionary["key1"] = "Ryzhik"
По такому же принципу можно добавить новый ключ со значением.
catDictionary["key4"] = "Murka"
Удалить элемент (ключ-значение) можно через оператор del. Также можно удалить весь словарь.
del catDictionary["key4"] del catDictionary
Если мы не хотим удалять сам словарь, а только очистить его от элементов, то воспользуемся методом clear().
catDictionary.clear()
print(catDictionary)
# {}
Выражение favorites1 == favorites2 истинно потому, что словари не упорядочены и считаются эквивалентными, если состоят из одинаковых пар ключ-значение.
Списки с одинаковыми значениями элементов, но разным порядком их следования, равны не будут.
favorites1 = {'фрукт':'апельсины', 'число':42, 'животное':'кот'}
favorites2 = {'животное':'кот', 'число':42, 'фрукт':'апельсины'}
favorites1 == favorites2
# True
Реклама
Словари.
Урок 23 курса «Python. Введение в программирование»В языке программирования Python словари (тип dict) представляют собой еще одну разновидность структур данных наряду со списками и кортежами. Словарь — это изменяемый (как список)
«Неупорядоченный» – значит, что последовательность расположения пар не важна, в следствие чего обращение к элементам по индексам невозможно.
В других языках структуры, схожие со словарями, называются по-другому. Например, в Java подобный тип данных называется отображением.
Чтобы представление о словаре стало более понятным, проведем аналогию с обычным словарем, например, англо-русским. На каждое английское слово в таком словаре есть русское слово-перевод: cat – кошка, dog – собака, table – стол и т. д. Если англо-русский словарь описать с помощью Python, то английские слова можно сделать ключами, а русские – их значениями:
{'cat': 'кошка', 'dog': 'собака', 'bird': 'птица'}Обратите внимание, что для определения словаря используются фигурные скобки.
Синтаксис словаря на Питоне описывается такой схемой:
В словаре доступ к значениям осуществляется не по индексам, а по ключам, которые заключаются в квадратные скобки (по аналогии с индексами списков):
>>> a['cat'] 'кошка' >>> a['bird'] 'птица'
Словари, как и списки, являются изменяемым типом данных: позволительно изменять, добавлять и удалять элементы (пары «ключ:значение»). Изначально словарь можно создать пустым (например, ) и потом заполнить его элементами. Добавление и изменение имеет одинаковый синтаксис: словарь[ключ] = значение. Ключ может быть как уже существующим (тогда происходит изменение значения), так и новым (происходит добавление элемента словаря). Удаление элемента осуществляется с помощью встроенной оператора del языка Python.
>>> a = {}
>>> a[1] = 2.34
>>> a[2] = 4.88
>>> a
{1: 2.34, 2: 4.
88}
>>> a[1] = 3.01
>>> a
{1: 3.01, 2: 4.88}
>>> del a[2]
>>> a
{1: 3.01}В словаре не может быть двух элементов с одинаковыми ключами. Однако могут быть одинаковые значения у разных ключей.
Ключом может быть любой неизменяемый тип данных. Значением – любой тип данных. Значения словарей вполне могут быть структурами, например, другими словарями или списками.
>>> nums = {'one': (1, 'I'), 'two': (2, 'II')}
>>> person1 = {'name': 'Tom', 'data': [4, 2.5]}
>>> person1['data'][0]
4
Перебор элементов словаря в цикле for
Элементы словаря перебираются в цикле также, как элементы других сложных объектов. Однако «по-умолчанию» извлекаются только ключи:
>>> nums
{1: 'one', 2: 'two', 3: 'three'}
>>> 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']
Методы словаря
Кроме рассмотренных выше трех методов , keys() и values() словари обладают еще восемью.
Это методы clear(), copy(), fromkeys(), get(), pop(), popitem(), setdefault(), update().
Метод clear() удаляет все элементы словаря, но не удаляет сам словарь. В итоге остается пустой словарь:
>>> nums
{'one': (1, 'I'), 'two': (2, 'II')}
>>> nums.clear()
>>> nums
{}
>>> n1 = {'a': 1, 'b': 2}
>>> n2 = n1
>>> n3 = n1.copy()
>>> n2['c'] = 3
>>> n1
{'a': 1, 'b': 2, 'c': 3}
>>> n2
{'a': 1, 'b': 2, 'c': 3}
>>> n3
{'a': 1, 'b': 2}Метод fromkeys() позволяет создать словарь из списка, элементы которого становятся ключами.
Применять метод можно как классу dict, так и к его объектам:
>>> a = [1, 2, 3]
>>> c = dict.fromkeys(a)
>>> c
{1: None, 2: None, 3: None}
>>> d = dict.fromkeys(a, 10)
>>> d
{1: 10, 2: 10, 3: 10}Метод get() позволяет получить элемент по его ключу:
>>> nums.get(1) 'one'
Равносильно nums[1].
Метод pop() удаляет из словаря элемент по указанному ключу и возвращает значение удаленной пары. Метод popitem() не принимает аргумента, удаляет элемент по принципу «последним вошел, первым вышел» и возвращает его в программу в виде кортежа (ключ, значение).
>>> nums = {1: 'one', 2: 'two', 3: 'three'}
>>> nums.pop(1)
'one'
>>> nums
{2: 'two', 3: 'three'}
>>> nums.popitem()
(3, 'three')
>>> nums
{2: 'two'}С помощью setdefault() можно добавить элемент в словарь:
>>> nums.setdefault(4, 'four') 'four' >>> nums {3: 'three', 4: 'four'}
Равносильно nums[4] = 'four', если элемент с ключом 4 отсутствует в словаре. Если он уже есть, то nums[4] = 'four' перезапишет старое значение, setdefault() – нет.
С помощью update() можно добавить в словарь другой словарь:
>>> nums.update({6: 'six', 7: 'seven'})
>>> nums
{3: 'three', 4: 'four', 6: 'six', 7: 'seven'}Также метод обновляет значения существующих ключей. Включает еще ряд особенностей.
Практическая работа
Создайте словарь, связав его с переменной school, и наполните данными, которые бы отражали количество учащихся в разных классах (1а, 1б, 2б, 6а, 7в и т. п.). Внесите изменения в словарь согласно следующему: а) в одном из классов изменилось количество учащихся, б) в школе появился новый класс, с) в школе был расформирован (удален) другой класс.
Вычислите общее количество учащихся в школе.Напишите функцию, которая принимает один словарь, и возвращает другой, в котором ключами являются значения из первого словаря, а значениями – соответствующие им ключи. Создайте словарь, передайте его в функцию. Выведите на экран исходный и «перевернутый» словари.
Примеры решения и дополнительные уроки в pdf-версии курса
Питон | Доступ к ключу-значению в словаре
Словарь — довольно полезная структура данных в программировании, которая обычно используется для хеширования определенного ключа со значением, чтобы их можно было эффективно извлечь. Давайте обсудим различные способы доступа ко всем ключам вместе с их значениями в словаре Python.
Метод № 1: Использование в операторе Наиболее часто используемый метод, который может получить все ключи вместе со своим значением, в операторе широко используется именно для этой цели и настоятельно рекомендуется, поскольку предлагает краткий метод для достижения этой задачи.
Python3
test_dict = { "Гики" : 1 , "для" : 2 , " geeks" : 3 }
print ( "Исходный словарь: " 9 0018 test_dict: print (i, test_dict[ i]) |
Исходный словарь: {'компьютерщики': 3, 'для': 2, 'гики': 1}
Ключ-значение Dict:
выродки 3
на 2
Компьютерщики 1 Временная сложность: O(n)
Вспомогательный пробел: O(1)
Метод № 2: Использование понимания списка Этот метод также использует метод, аналогичный описанному выше, просто связывает логику в один список и возвращает пары ключ-значение словаря как кортежи ключа и значения в списке.
Python3
test_dict = { "Гики" : 1 , "для" : 2 , "вундеркинды" : 3 } 9 0016 print ( "Исходный словарь:" + str (test_dict ))
print ( "ключ-значение Dict: " ) print ([(k, test_dict[k]) для k в test_dict]) |
Исходный словарь: {'Geeks': 1, 'for': 2, 'geeks': 3}
Ключ-значение Dict:
[('Geeks', 1), ('for', 2), ('geeks', 3)] Временная сложность: O(n)
Вспомогательное пространство: O(1)
Метод #3: Использование dict.
items() items() в словаре перебирает все ключи и помогает нам получить доступ к паре ключ-значение один за другим в цикле, а также является хорошим методом доступа к ключам словаря со значением .
Python3
test_dict = { "Гики" : 1 , "для" : 2 , " geeks" : 3 }
print ( "Исходный словарь: " 9 0018 |
Исходный словарь: {'гики': 3, 'для': 2, 'гики': 1}
Ключ-значение Dict:
выродки 3
на 2
Компьютерщики 1 Время Сложность: O(n)
Вспомогательное пространство: O(1)
Метод №4: Использование enumerate() Python также предлагает enumerate() с помощью для перебора всех типов контейнеров, будь то словарь или список.
Сила этой функции также может быть использована для выполнения этой задачи. Это также дополнительно помогает получить доступ к именованному индексу позиции пары в словаре.
Python3
test_dict = 9, "гики" : 3 }
print ( "Исходный словарь: " + str (test_dict))
print 900 18 |
Исходный словарь: {'компьютерщики': 3, 'гики': 1, 'для': 2}
Ключ-значение Dict:
(0, ('выродки', 3))
(1, ('Вундеркинды', 1))
(2, ('for', 2)) Временная сложность: O(n)
Вспомогательное пространство: O(1)
Метод № 5: Использование цикла for и метода items()
Python3
test_dict = { "Гики" : 1 , "для" : 2 , "вундеркинды" : 3 }
print ( "Исходный словарь: " + стр (test_dict))
key_value_pairs = []
для ключ, значение 90 018 |
Исходный словарь : {'Гики': 1, 'для': 2, 'гики': 3}
Ключ-значение Dict:
(«Вундеркинды», 1)
(«для», 2)
('geeks', 3) Временная сложность O(n), где n — количество пар ключ-значение в словаре,
Вспомогательная пространственная сложность O(n) для хранения списка пар ключ-значение .
Перебор словаря (ключ и значение) с циклом for в Python
В Python для перебора словаря ( dict ) с циклом for используйте методы keys() , values() и items() . Вы также можете получить список всех ключей и значений в словаре с помощью этих методов и list() .
- Перебор ключей словаря: keys()
- Повторить значения словаря: values()
- Итерировать словарные пары ключ-значение: items()
В качестве примера рассмотрим следующий словарь:
d = {'key1': 1, 'key2': 2, 'key3': 3}
источник: dict_keys_values_items.py
Вы можете перебирать ключи, напрямую используя объект словаря в цикле for .
для k в d:
печать (к)
# ключ1
# ключ2
# ключ3
источник: dict_keys_values_items.py
Основные сведения о циклах for в Python см. в следующей статье.
- Python для цикла (с диапазоном, перечислением, zip и т. д.)
Перебор ключей словаря:
keys() Как упоминалось выше, вы можете перебирать ключи словаря, напрямую используя объект словаря, но вы также можете использовать keys() . Результат тот же, но keys() могут прояснить намерение читателю кода.
- Встроенные типы — dict.keys() — Документация по Python 3.11.3
для k в d.keys():
печать (к)
# ключ1
# ключ2
# ключ3
источник: dict_keys_values_items.py
Метод keys() возвращает dict_keys , которые можно преобразовать в список с помощью list() .
ключей = d.keys() печать (ключи) печать (тип (ключи)) # dict_keys(['key1', 'key2', 'key3']) # <класс 'dict_keys'> k_list = список (d.keys()) печать (к_список) печать (тип (k_list)) # ['ключ1', 'ключ2', 'ключ3'] # <класс 'список'>
источник: dict_keys_values_items.py
Вы можете использовать dict_keys для выполнения операций над множествами. Подробнее см. в следующей статье.
- Установка операций над несколькими ключами словаря в Python
Повторить значения словаря:
values() Для повторения значений словаря используйте метод values() .
- Встроенные типы — dict.
values() — Документация по Python 3.11.3
для v в d.values():
печать (v)
№ 1
№ 2
№ 3
источник: dict_keys_values_items.py
Метод values() возвращает dict_values , которые можно преобразовать в список с список() .
значения = d.значения() печать (значения) печать (тип (значения)) # dict_values([1, 2, 3]) # <класс 'dict_values'> v_list = список (d.values()) печать (v_list) печать (тип (v_list)) # [1, 2, 3] # <класс 'список'>
источник: dict_keys_values_items.py
Итерация пар ключ-значение словаря:
items() Для итерации пар ключ-значение словаря используйте метод items() .
- Встроенные типы — dict.items() — Документация по Python 3.11.3
для k, v в d.items():
печать (к, v)
# ключ1 1
# ключ2 2
# ключ3 3
источник: dict_keys_values_items.py
Вы также можете получить пары ключ-значение в виде кортежа (ключ, значение) :
для t в d.


get("key5", "That key is not found")
print(val)

.. print(nums[i])
...
one
two
three
setdefault(4, 'four')
'four'
>>> nums
{3: 'three', 4: 'four'}
Вычислите общее количество учащихся в школе.
items():
values() — Документация по Python 3.11.3