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.