Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Словари в Python: создание, манипуляции и продвинутые техники

Словарь в Python

Это подробное руководство объясняет словари Python — как их создавать, получать доступ, добавлять, удалять элементы и использовать встроенные методы.

Видео: Словари Python для хранения пар ключ/значение

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


Создание словаря в Python

Определить словарь просто: поместите пары ключ/значение, разделённые запятыми, внутри фигурных скобок {}. Ключи должны быть неизменяемыми (строки, числа, кортежи из неизменяемых элементов) и уникальными; значения могут быть любого типа и повторяться.

# пустой словарь
my_dict = {}
# словарь с целочисленными ключами
my_dict = {1: 'apple', 2: 'ball'}
# словарь со смешанными ключами
my_dict = {'name': 'John', 1: [2, 4, 3]}
# используя dict()
my_dict = dict({1:'apple', 2:'ball'})
# из последовательности пар
my_dict = dict([(1,'apple'), (2,'ball')])

Все перечисленные подходы создают одну и ту же структуру словаря.


Доступ к элементам словаря

Значения словаря извлекаются по ключам либо с квадратными скобками [], либо методом get(). Использование скобок вызывает KeyError, если ключ отсутствует; get() возвращает None по умолчанию.

# get vs [] для получения элементов
my_dict = {'name': 'Jack', 'age': 26}
# Вывод: Jack
print(my_dict['name'])
# Вывод: 26
print(my_dict.get('age'))
# Попытка доступа к отсутствующему ключу возвращает None
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])

Вывод

Jack
26
None
Traceback (most recent call last):
  File "<string>", line 15, in <module>
print(my_dict['address'])
KeyError: 'address'

Изменение и добавление элементов словаря

Словари изменяемы. Присваивание существующему ключу обновляет его значение; присваивание новому ключу добавляет новую запись.

# Изменение и добавление элементов словаря
my_dict = {'name': 'Jack', 'age': 26}
# обновить значение
my_dict['age'] = 27
# Вывод: {'age': 27, 'name': 'Jack'}
print(my_dict)
# добавить элемент
my_dict['address'] = 'Downtown'
# Вывод: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)

Вывод

{'name': 'Jack', 'age': 27}
{'name': 'Jack', 'age': 27, 'address': 'Downtown'}

Удаление элементов из словаря

Используйте pop() для удаления конкретного ключа и получения его значения. popitem() удаляет произвольную пару, а clear() очищает весь словарь. Ключевое слово del может удалить отдельные записи или всю переменную.

# Удаление элементов из словаря
# создаём словарь
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# удалить конкретный элемент, возвращает его значение
# Вывод: 16
print(squares.pop(4))
# Вывод: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# удалить произвольный элемент, вернуть (ключ, значение)
# Вывод: (5, 25)
print(squares.popitem())
# Вывод: {1: 1, 2: 4, 3: 9}
print(squares)
# удалить все элементы
squares.clear()
# Вывод: {}
print(squares)
# удалить сам словарь
del squares
# Вызовет ошибку
print(squares)

Вывод

16
{1: 1, 2: 4, 3: 9, 5: 25}
(5, 25)
{1: 1, 2: 4, 3: 9}
{}
Traceback (most recent call last):
  File "<string>", line 30, in <module>
print(squares)
NameError: name 'squares' is not defined

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

Таблица ниже перечисляет распространённые методы словаря и их назначение. Многие продемонстрированы в последующих примерах.

МетодОписание
clear()Удаляет все элементы из словаря.
copy()Возвращает поверхностную копию словаря.
fromkeys(seq[, v])Создаёт новый словарь из seq со всеми ключами, установленными в v (по умолчанию None).
get(key[,d])Возвращает значение для key; если отсутствует, возвращает d (по умолчанию None).
items()Возвращает представление пар (ключ, значение) словаря.
keys()Возвращает представление ключей словаря.
pop(key[,d])Удаляет key и возвращает его значение или d; вызывает KeyError, если key отсутствует и d не задан.
popitem()Удаляет и возвращает произвольную пару (ключ, значение); вызывает KeyError, если словарь пуст.
setdefault(key[,d])Возвращает значение для key; если отсутствует, вставляет key со значением d (по умолчанию None) и возвращает d.
update([other])Вставляет или обновляет пары ключ/значение из other, перезаписывая существующие ключи.
values()Возвращает представление значений словаря.

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

# Методы словаря
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# Вывод: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
    print(item)
# Вывод: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))

Вывод

{'Math': 0, 'English': 0, 'Science': 0}
('Math', 0)
('English', 0)
('Science', 0)
['English', 'Math', 'Science']

Генераторы словарей (Dictionary Comprehension)

Генераторы словарей дают лаконичный синтаксис для построения словарей из итерируемых объектов. Они следуют шаблону {key: value for element in iterable}.

# Генератор словаря
squares = {x: x*x for x in range(6)}
print(squares)

Вывод

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Эквивалент императивной версии:

squares = {}
for x in range(6):
    squares[x] = x*x
print(squares)

Вывод

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Генераторы могут включать несколько циклов и фильтры if. Пример: только квадраты нечётных чисел.

# Генератор словаря с условием if
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)

Вывод

{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

Подробнее о генераторах словарей см. Python Dictionary Comprehension.


Другие операции со словарями

Проверка принадлежности ключа

Используйте оператор in для проверки наличия ключа; он не проверяет значения.

# Проверка принадлежности ключей словаря
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: True
print(1 in squares)
# Вывод: True
print(2 not in squares)
# проверка принадлежности только для ключей, не для значений
# Вывод: False
print(49 in squares)

Вывод

True
True
False

Итерация по словарю

Перебирайте ключи напрямую, затем получайте значения.

# Итерация по словарю
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
    print(squares[i])

Вывод

1
9
25
49
81

Встроенные функции для словарей

Стандартные функции вроде all(), any(), len() и sorted() часто применяются к словарям.

ФункцияОписание
all()True, если каждый ключ оценивается как True (или словарь пуст).
any()True, если любой ключ оценивается как True; False для пустого словаря.
len()Количество пар ключ/значение.
cmp()Сравнивает два словаря (удалено в Python 3).
sorted()Возвращает отсортированный список ключей.

Примеры:

# Встроенные функции для словарей
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: False
print(all(squares))
# Вывод: True
print(any(squares))
# Вывод: 6
print(len(squares))
# Вывод: [0, 1, 3, 5, 7, 9]
print(sorted(squares))

Вывод

False
True
6
[0, 1, 3, 5, 7, 9]

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
  5. Итераторы в Python: как они работают и как создать свои
  6. Замыкания в Python: как вложенные функции захватывают переменные
  7. Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
  8. Обзор Python: высокоуровневый, читаемый, интерактивный и объектно-ориентированный язык
  9. Числа в Python: Неизменяемые числовые типы данных
  10. Строки в Python: Создание, доступ, форматирование и методы манипуляции