Словари в Python

10.02.2018

Теги: PythonКоллекцияТипыДанных

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

Примеры

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

>>> cat = {'name': 'Tom', 'species': 'cat', 'age': 3}
>>> spam = {}
>>> spam[2] = 'second'
>>> spam[3] = 'third'
>>> spam[1] = 'first'
>>> spam
{2: 'second', 3: 'third', 1: 'first'}

Доступ к значениям по ключу

>>> cat = {'name': 'Tom', 'spesies': 'cat', 'age': 3}
>>> cat['name']
'Tom'

Методы keys(), values() и items()

>>> spam = {'color': 'red', 'age': 42}
>>> spam.keys()
dict_keys(['color', 'age'])
>>> spam.values()
dict_values(['red', 42])
>>> spam.items()
dict_items([('color', 'red'), ('age', 42)])

Возвращаемые этими методами коллекции не являются истинными списками, однако эти типы данных (dict_keys, dict_values, dict_items) можно использовать в цикле for.

spam = {'color': 'red', 'age': 42}
# ключи
for key in spam.keys():
    print(key)
# значения
for value in spam.value():
    print(value)
# ключи и значения
for key, value in spam.items():
    print('key=', key, ', value=', value, sep = '')

Проверка существования ключа или значения в с помощью операторов in и not in.

>>> users = {'ivanov@mail.ru' : 'Иванов', 'petrov@mail.ru' : 'Петров'}
>>> 'ivanov@mail.ru' in users
True
>>> 'ivanov@mail.ru' in users.keys()
True
>>> 'Иванов' in users.values()
True
>>> 'Петров' not in users.values()
False

Метод get(key [,default]) возврвщает значение по ключу. Если ключ отсутствует в словаре, метод возвращает значение по умолчанию default.

>>> users = {'ivanov@mail.ru' : 'Иванов', 'petrov@mail.ru' : 'Петров'}
>>> users.get('sidorov@mail.ru', 'Нет такого пользователя')
'Нет такого пользователя'

Метод setdefault(key [,default]) возвращает значение ключа, но если его нет — создает ключ с значением default.

>>> users = {'ivanov@mail.ru' : 'Иванов', 'petrov@mail.ru' : 'Петров'}
>>> user = users.setdefault('sidorov@mail.ru', 'Сидоров')
>>> user
'Сидоров'
>>> users
{'ivanov@mail.ru': 'Иванов', 'petrov@mail.ru': 'Петров', 'sidorov@mail.ru': 'Сидоров'}

Метод pop(key [,default]) удаляет ключ и возвращает значение; если ключа нет, возвращает default.

>>> users = {'ivanov@mail.ru' : 'Иванов', 'petrov@mail.ru' : 'Петров'}
>>> users.pop('ivanov@mail.ru')
'Иванов'
>>> users
{'petrov@mail.ru': 'Петров'}
>>> users.pop('sidorov@mail.ru', 'Сидоров')
'Сидоров'

Метод popitem() удаляет и возвращает кортеж (ключ, значение).

>>> users = {'ivanov@mail.ru': 'Иванов', 'petrov@mail.ru': 'Петров', 'sidorov@mail.ru': 'Сидоров'}
>>> for i in range(len(users)):
...     user = users.popitem()
...     print(user)

('sidorov@mail.ru', 'Сидоров')
('petrov@mail.ru', 'Петров')
('ivanov@mail.ru', 'Иванов')
>>> users
{}

Оператор del удаляет пару по ключу.

>>> users = {'ivanov@mail.ru': 'Иванов', 'petrov@mail.ru': 'Петров'}
>>> del users['ivanov@mail.ru']
>>> users
{'petrov@mail.ru': 'Петров'}

Метод copy() возвращает поверхностную копию словаря.

>>> users = {'ivanov@mail.ru': 'Иванов', 'petrov@mail.ru': 'Петров'}
>>> spam = users.copy()
>>> spam
{'ivanov@mail.ru': 'Иванов', 'petrov@mail.ru': 'Петров'}
>>> spam = {1:[1,1], 2:[2,2]}
>>> copy = spam.copy()
>>> spam[1][0] = 3
>>> spam
{1: [3, 1], 2: [2, 2]}
>>> copy
{1: [3, 1], 2: [2, 2]}

Для создания глубокой копии, нужно использовать метод deepcopy() модуля copy.

  • Поверхностная копия создает новый составной объект (словарь или список), и затем вставляет в него ссылки на объекты, находящиеся в оригинале.
  • Глубокая копия создает новый составной объект (словарь или список), и затем рекурсивно вставляет в него копии объектов, находящихся в оригинале.

Поиск: Python • Коллекция • Словарь • Типы данных

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.