Python dict (Словарь)

В языке Python dict (словарь) представляет собой структуру данных, которая хранит пары ключ-значение. Cловарь является изменяемым (mutable) типом данных и позволяет быстро находить и получать значения по ключу.

Уникальные ключи

Словарь хранит пары ключ-значение, и каждый ключ в словаре должен быть уникальным. Если вы попытаетесь добавить в словарь уже существующий ключ, его значение будет обновлено.

Изменяемость

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

Быстрый доступ по ключу

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

Гибкость ключей

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

Методы

  1. dict(): создает пустой словарь или преобразует другие структуры данных в словарь.
  2. len(dict): возвращает количество элементов в словаре.
  3. dict[key]: возвращает значение, связанное с указанным ключом. Если ключ отсутствует, возникает ошибка.
  4. dict[key] = value: присваивает значение по ключу. Если ключ уже существует, то его значение обновляется, а если ключ новый, то он добавляется в словарь.
  5. del dict[key]: удаляет элемент по указанному ключу.
  6. key in dict: проверяет, содержит ли словарь указанный ключ, и возвращает True или False.
  7. dict.keys(): возвращает представление ключей словаря.
  8. dict.values(): возвращает представление значений словаря.
  9. dict.items(): возвращает представление пар (ключ, значение) словаря.
  10. dict.get(key, default): возвращает значение, связанное с указанным ключом. Если ключ отсутствует, возвращает значение default.
  11. dict.pop(key, default): удаляет элемент по указанному ключу и возвращает его значение. Если ключ отсутствует, возвращает значение default.
  12. dict.copy(): создает легкую копию словаря.
  13. dict.update(other_dict): обновляет словарь, добавляя пары ключ-значение из другого словаря other_dict.
  14. dict.setdefault(key, default): возвращает значение, связанное с указанным ключом. Если ключ отсутствует, добавляет ключ со значением default.
  15. dict.popitem(): удаляет и возвращает последнюю добавленную пару (ключ, значение).
  16. dict.fromkeys(iterable, value=None): создает новый словарь, используя элементы из итерируемого объекта iterable в качестве ключей и опциональное значение value в качестве значений.
  17. dict.clear(): удаляет все элементы из словаря.

Метод dict.get

Метод get(key, default) словаря (dict) в языке Python позволяет получить значение, связанное с указанным ключом. Он принимает два параметра:

  • key: Ключ, для которого нужно получить значение.
  • default (необязательный): Значение, которое будет возвращено, если ключ отсутствует в словаре.

Если ключ key присутствует в словаре, метод get() вернет значение, связанное с этим ключом. Однако, если ключ отсутствует, вместо возникновения ошибки метод вернет значение default. Если аргумент default не указан, то будет возвращено значение None.

Преимущество использования метода get() заключается в том, что он позволяет избежать возникновения ошибки, если ключ отсутствует в словаре. Вместо этого можно указать значение по умолчанию, которое будет возвращено в случае отсутствия ключа.

Пример использования метода get():

person = {"name": "John", "age": 30}

name = person.get("name")
print(name)  # Вывод: "John"

city = person.get("city", "Unknown")
print(city)  # Вывод: "Unknown", так как ключ "city" отсутствует в словаре

Метод dict.items()

Метод items() словаря (dict) возвращает представление, которое можно использовать для итерации по всем парам (ключ, значение) в словаре или для преобразования их в другие структуры данных, такие как список или кортеж.

Каждая пара (ключ, значение) представляется в виде кортежа, где первый элемент - ключ, а второй элемент - значение.

Пример использования метода items():

person = {"name": "John", "age": 30, "city": "New York"}

# Итерация по всем парам (ключ, значение)
for key, value in person.items():
    print(key, value)

# Вывод:
# name John
# age 30
# city New York

Метод dict.keys()

Метод keys() словаря (dict) в языке Python возвращает представление (view) ключей словаря. Он не принимает никаких параметров.

Метод keys() полезен, когда вам нужно получить все ключи, хранящиеся в словаре, для последующей итерации, поиска или других операций, связанных с ключами.

Возвращаемое значение метода keys() представляет собой объект представления ключей, который обеспечивает динамическое представление ключей словаря. Изменения, производимые в самом словаре, отразятся на этом представлении, и наоборот.

Пример использования метода keys() для получения всех ключей словаря:

person = {"name": "John", "age": 30, "city": "New York"}

keys = person.keys()
print(keys)  # Вывод: dict_keys(['name', 'age', 'city'])

Пример использования метода keys() в цикле для итерации по ключам словаря:

person = {"name": "John", "age": 30, "city": "New York"}

for key in person.keys():
    print(key)  # Вывод: name, age, city

Метод dict.values()

Метод values() словаря (dict) в языке Python возвращает представление (view) значений словаря. Он не принимает никаких параметров.

Метод values() полезен, когда вам нужно получить все значения, хранящиеся в словаре, для последующей итерации, поиска или других операций, связанных со значениями.

Возвращаемое значение метода values() представляет собой объект представления значений, который обеспечивает динамическое представление значений словаря. Изменения, производимые в самом словаре, отразятся на этом представлении, и наоборот.

Пример использования метода values() для получения всех значений словаря:

person = {"name": "John", "age": 30, "city": "New York"}

values = person.values()
print(values)  # Вывод: dict_values(['John', 30, 'New York'])

Пример использования метода values() в цикле для итерации по значениям словаря:

person = {"name": "John", "age": 30, "city": "New York"}

for value in person.values():
    print(value)  # Вывод: John, 30, New York

Метод dict.pop

Метод pop(key, default) словаря (dict) в языке Python удаляет элемент, связанный с указанным ключом, из словаря и возвращает его значение. Он принимает два параметра:

  • key: Ключ элемента, который нужно удалить и вернуть.
  • default (необязательный): Значение, которое будет возвращено, если ключ отсутствует в словаре.

Если ключ key присутствует в словаре, метод pop() удалит элемент с этим ключом и вернет его значение. Однако, если ключ отсутствует, метод вернет значение default. Если аргумент default не указан, и ключ отсутствует, будет возбуждено исключение KeyError.

Пример использования метода pop() для удаления элемента и получения его значения:

person = {"name": "John", "age": 30}

age = person.pop("age")
print(age)  # Вывод: 30
print(person)  # Вывод: {"name": "John"}

Пример использования метода pop() с аргументом default для удаления элемента и получения значения по умолчанию, если ключ отсутствует:

person = {"name": "John"}

age = person.pop("age", 0)
print(age)  # Вывод: 0, так как ключ "age" отсутствует
print(person)  # Вывод: {"name": "John"}

Метод dict.copy

Метод copy() словаря (dict) в языке Python создает и возвращает поверхностную копию словаря. Он не изменяет оригинальный словарь, а создает новый словарь, содержащий все элементы оригинала.

Пример использования метода copy() для создания копии словаря:

person = {"name": "John", "age": 30}

person_copy = person.copy()
print(person_copy)  # Вывод: {"name": "John", "age": 30}

Метод copy() полезен, когда требуется создать независимую копию словаря. Изменения, внесенные в копию, не будут влиять на оригинальный словарь, и наоборот.

Пример сравнения изменений в оригинальном словаре и его копии:

person = {"name": "John", "age": 30}
person_copy = person.copy()

person_copy["age"] = 40

print(person)  # Вывод: {"name": "John", "age": 30}
print(person_copy)  # Вывод: {"name": "John", "age": 40}

Метод dict.update

Метод update() словаря (dict) в языке Python обновляет словарь, добавляя пары ключ-значение из другого словаря (other_dict). Он принимает один параметр:

  • other_dict: Словарь, элементы которого будут добавлены или заменены в текущем словаре.

Метод update() выполняет следующие действия:

  • Если ключ из other_dict уже существует в текущем словаре, то его значение обновляется.
  • Если ключ отсутствует в текущем словаре, то пара ключ-значение добавляется в словарь.

Пример использования метода update() для обновления словаря:

person = {"name": "John", "age": 30}
details = {"city": "New York", "country": "USA"}

person.update(details)
print(person)  # Вывод: {"name": "John", "age": 30, "city": "New York", "country": "USA"}

Метод update() позволяет объединять два словаря, добавляя элементы из другого словаря в текущий. Если встречаются одинаковые ключи, значения будут обновлены в соответствии с other_dict.

Пример слияния двух словарей с обновлением значений:

person = {"name": "John", "age": 30}
details = {"age": 35, "city": "New York"}

person.update(details)
print(person)  # Вывод: {"name": "John", "age": 35, "city": "New York"}

Метод dict.setdefault

Метод setdefault() словаря (dict) в языке Python возвращает значение, связанное с указанным ключом. Если ключ отсутствует в словаре, метод добавляет новую пару ключ-значение с указанным ключом и значением по умолчанию. Он принимает два параметра:

  • key: Ключ, для которого нужно получить значение или добавить новую пару ключ-значение.
  • default (необязательный): Значение, которое будет установлено для ключа, если ключ отсутствует в словаре. По умолчанию None.

Метод setdefault() выполняет следующие действия:

  • Если ключ key присутствует в словаре, то метод вернет значение, связанное с этим ключом.
  • Если ключ отсутствует в словаре, то метод добавит новую пару ключ-значение с ключом key и значением default, если default был указан. В противном случае, будет использовано значение None.

Пример использования метода setdefault():

person = {"name": "John", "age": 30}

name = person.setdefault("name", "Unknown")
print(name)  # Вывод: "John"

city = person.setdefault("city", "New York")
print(city)  # Вывод: "New York", так как ключ "city" отсутствует в словаре

Метод setdefault() полезен, когда вам нужно получить значение по ключу из словаря, но при этом обеспечить наличие ключа и значения по умолчанию, если ключ отсутствует.

Пример использования метода setdefault() для добавления новой пары ключ-значение:

person = {"name": "John", "age": 30}

country = person.setdefault("country", "USA")
print(person)  # Вывод: {"name": "John", "age": 30, "country": "USA"}

Метод dict.popitem

Метод popitem() словаря (dict) в языке Python удаляет и возвращает последнюю добавленную пару (ключ, значение) из словаря. Он не принимает никаких параметров.

Метод popitem() выполняет следующие действия:

  • Удаляет произвольную пару (ключ, значение) из словаря.
  • Возвращает эту пару в виде кортежа (key, value).

Пример использования метода popitem():

person = {"name": "John", "age": 30, "city": "New York"}

item = person.popitem()
print(item)  # Вывод: ("city", "New York")
print(person)  # Вывод: {"name": "John", "age": 30}

Метод popitem() полезен, когда вам нужно получить и удалить произвольную пару (ключ, значение) из словаря. Поскольку словари в Python не упорядочены, пара, которая будет удалена, может быть любой.

Обратите внимание, что если словарь пустой, вызов метода popitem() вызовет исключение KeyError. Поэтому перед вызовом метода рекомендуется проверить, что словарь содержит хотя бы одну пару (ключ, значение).

Метод dict.fromkeys

Метод fromkeys(iterable, value=None) словаря (dict) в языке Python создает новый словарь, используя элементы из итерируемого объекта iterable в качестве ключей и опциональное значение value в качестве значений. Он принимает два параметра:

  • iterable: Итерируемый объект, элементы которого будут использованы в качестве ключей словаря.
  • value (необязательный): Значение, которое будет присвоено каждому ключу в словаре. Если не указано, каждому ключу будет присвоено значение None.

Метод fromkeys() выполняет следующие действия:

  1. Создает новый словарь, используя элементы из iterable в качестве ключей.
  2. Каждому ключу в словаре присваивается значение value (если указано) или значение None (по умолчанию).

Пример использования метода fromkeys():

keys = ["name", "age", "city"]
default_value = 0

person = dict.fromkeys(keys, default_value)
print(person)  # Вывод: {"name": 0, "age": 0, "city": 0}

Метод fromkeys() полезен, когда вам нужно создать новый словарь с предопределенными ключами и значениями. Вы можете указать список ключей в качестве iterable и опциональное значение value, которое будет присвоено каждому ключу.

Обратите внимание, что все ключи в созданном словаре будут разделять одно и то же значение value (если указано) или значение None (по умолчанию). Если изменить значение одного ключа, это не повлияет на значения других ключей.

Метод dict.clear

Метод clear() словаря (dict) в языке Python удаляет все элементы из словаря, делая его пустым. Он не принимает никаких параметров.

Вызов метода clear() выполняет следующие действия:

  • Удаляет все ключи и значения из словаря, очищая его содержимое.
  • После вызова метода clear(), словарь становится пустым, и его длина становится равной 0.

Пример использования метода clear():

person = {"name": "John", "age": 30, "city": "New York"}

person.clear()
print(person)  # Вывод: {}

Метод clear() полезен, когда вам нужно удалить все элементы из словаря и сделать его пустым. Это может быть полезно, если вы хотите переиспользовать словарь с новыми данными или освободить память, занимаемую словарем.

Обратите внимание, что вызов метода clear() изменяет сам словарь, а не создает новый словарь. Если у вас есть ссылки на словарь в других переменных или структурах данных, они также будут отражать изменения, и будут ссылаться на пустой словарь после вызова clear().

Cловарь (dict) в формат JSON (dict to json)

Cловарь (dict) можно преобразовать в формат JSON с помощью модуля json. Преобразование словаря в JSON позволяет сохранить его содержимое в виде текстовой строки или записать его в файл.

Для выполнения преобразования словаря в JSON необходимо использовать методы из модуля json. В частности:

  • json.dumps(dict) - преобразует словарь в строку JSON.
  • json.dump(dict, file) - записывает словарь в файл в формате JSON.

Пример использования метода dumps():

import json

person = {"name": "John", "age": 30, "city": "New York"}

json_data = json.dumps(person)
print(json_data)
# Вывод: {"name": "John", "age": 30, "city": "New York"}

В данном примере словарь person преобразуется в строку JSON с помощью метода json.dumps(). Результат преобразования сохраняется в переменной json_data и выводится на экран.

Пример использования метода dump() для записи в файл:

import json

person = {"name": "John", "age": 30, "city": "New York"}

with open("person.json", "w") as file:
    json.dump(person, file)

Сортировка словаря

Для сортировки словаря (dict) в языке Python по ключу и значению можно использовать функцию sorted() в сочетании с параметром key, который указывает на функцию, определяющую значение для сортировки.

Пример сортировки словаря по ключу:

person = {"Alice": 25, "Bob": 32, "Charlie": 18, "David": 40}

sorted_person = sorted(person.items(), key=lambda x: x[0])

for name, age in sorted_person:
    print(name, age)
# Вывод
# Alice 25
# Bob 32
# Charlie 18
# David 40

Пример сортировки словаря по значению:

person = {"Alice": 25, "Bob": 32, "Charlie": 18, "David": 40}

sorted_person = sorted(person.items(), key=lambda x: x[1])

for name, age in sorted_person:
    print(name, age)
# Вывод
# Charlie 18
# Alice 25
# Bob 32
# David 40

В этом примере словарь person содержит имена людей в качестве ключей и их возраст в качестве значений. Мы используем функцию sorted() для сортировки пар (ключ, значение) словаря по значению.

В параметре key мы передаем лямбда-функцию lambda x: x[1], которая извлекает второй элемент (значение) из каждой пары (ключ, значение). Таким образом, словарь сортируется на основе значений.

Результат сортировки сохраняется в переменной sorted_person, которая является списком кортежей (пар (ключ, значение)), отсортированных по значению.

Затем мы итерируемся по отсортированному списку и выводим имена и возраст каждого человека на экран.