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']
'птица'

Словари, как и списки, являются изменяемым типом данных: позволительно изменять, добавлять и удалять элементы (пары «ключ:значение»). Изначально словарь можно создать пустым (например,

d = {}) и потом заполнить его элементами. Добавление и изменение имеет одинаковый синтаксис: словарь[ключ] = значение. Ключ может быть как уже существующим (тогда происходит изменение значения), так и новым (происходит добавление элемента словаря). Удаление элемента осуществляется с помощью встроенной оператора 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

Элементы словаря перебираются в цикле

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']

Методы словаря

Кроме рассмотренных выше трех методов

items(), 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'}

Также метод обновляет значения существующих ключей. Включает еще ряд особенностей.

Практическая работа

  1. Создайте словарь, связав его с переменной school, и наполните данными, которые бы отражали количество учащихся в разных классах (1а, 1б, 2б, 6а, 7в и т. п.). Внесите изменения в словарь согласно следующему: а) в одном из классов изменилось количество учащихся, б) в школе появился новый класс, с) в школе был расформирован (удален) другой класс. Вычислите общее количество учащихся в школе.

  2. Напишите функцию, которая принимает один словарь, и возвращает другой, в котором ключами являются значения из первого словаря, а значениями – соответствующие им ключи. Создайте словарь, передайте его в функцию. Выведите на экран исходный и «перевернутый» словари.

Примеры решения и дополнительные уроки в pdf-версии курса


Питон | Доступ к ключу-значению в словаре

Словарь — довольно полезная структура данных в программировании, которая обычно используется для хеширования определенного ключа со значением, чтобы их можно было эффективно извлечь. Давайте обсудим различные способы доступа ко всем ключам вместе с их значениями в словаре Python.

Метод № 1: Использование в операторе Наиболее часто используемый метод, который может получить все ключи вместе со своим значением, в операторе широко используется именно для этой цели и настоятельно рекомендуется, поскольку предлагает краткий метод для достижения этой задачи.

Python3

 

test_dict = { "Гики" : 1 , "для" : 2 , " geeks" : 3 }

 

print ( "Исходный словарь: " 9 0018 + стр (test_dict))

 

print ( "ключ-значение Dict: " )

для i 90 017 в
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 + стр (test_dict))

 

print ( "ключ-значение Dict: " )

для ключ, значение в test_dict.items():

     печать (ключ, значение)

Вывод:

 Исходный словарь: {'гики': 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 ( " Ключ-значение Dict : " )

для i в перечислить (test_dict.items()):

     напечатать (i)

Вывод:

 Исходный словарь: {'компьютерщики': 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 в test_dict. items():

     key_value_pairs.append((ключ, значение ))

 

print ( "ключ-значение Dict: " )

для пара в key_value_pairs:

     печать (пара)

Вывод

 Исходный словарь : {'Гики': 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.