Словари в 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 • Коллекция • Словарь • Типы данных