Словари Python
В Python словарь — это упорядоченная (начиная с Python > 3.7) коллекция пар ключ: значение.
Из документации Python 3
Основные операции со словарем — это сохранение значения с некоторым ключом и извлечение значения по заданному ключу. Также можно удалить пару ключ:значение с помощью del.
Пример словаря:
# Dictionary: collection of key-value pairs
my_cat = {
'size': 'fat', # key: 'size', value: 'fat'
'color': 'gray', # key: 'color', value: 'gray'
'disposition': 'loud' # key: 'disposition', value: 'loud'
}
Установка ключа, значения с помощью оператора подстроки []
# Add or update dictionary entry using subscript operator
my_cat = {
'size': 'fat',
'color': 'gray',
'disposition': 'loud',
}
my_cat['age_years'] = 2 # Add new key-value pair
print(my_cat)
{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}
Получение значения с помощью оператора подстроки []
В случае, если ключ не присутствует в словаре, вызывается исключение KeyError.
my_cat = {
'size': 'fat',
'color': 'gray',
'disposition': 'loud',
}
print(my_cat['size'])
fat
print(my_cat['eye_color'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'eye_color'
values()
Метод values() получает значения словаря:
# Iterate over dictionary values using .values() method
pet = {'color': 'red', 'age': 42}
for value in pet.values(): # Loop through all values
print(value)
red
42
keys()
Метод keys() получает ключи словаря:
# Iterate over dictionary keys using .keys() method
pet = {'color': 'red', 'age': 42}
for key in pet.keys(): # Loop through all keys
print(key)
color
age
Нет необходимости использовать .keys(), так как по умолчанию вы будете перебирать ключи:
# Iterating over dictionary directly loops through keys (default behavior)
pet = {'color': 'red', 'age': 42}
for key in pet: # Equivalent to for key in pet.keys()
print(key)
color
age
items()
Метод items() получает элементы словаря и возвращает их в виде кортежа (Tuple):
pet = {'color': 'red', 'age': 42}
for item in pet.items():
print(item)
('color', 'red')
('age', 42)
Используя методы keys(), values() и items(), цикл for может перебирать ключи, значения или пары ключ-значение в словаре соответственно.
# Iterate over key-value pairs using .items() method
pet = {'color': 'red', 'age': 42}
for key, value in pet.items(): # Unpack tuple into key and value
print(f'Key: {key} Value: {value}')
Key: color Value: red
Key: age Value: 42
get()
Метод get() возвращает значение элемента с заданным ключом. Если ключ не существует, он возвращает None:
# .get() method: safely retrieve value, returns None if key doesn't exist
wife = {'name': 'Rose', 'age': 33}
f'My wife name is {wife.get("name")}' # Returns 'Rose'
'My wife name is Rose'
f'She is {wife.get("age")} years old.'
'She is 33 years old.'
f'She is deeply in love with {wife.get("husband")}'
'She is deeply in love with None'
Вы также можете изменить значение по умолчанию None на то, которое выберете:
wife = {'name': 'Rose', 'age': 33}
f'She is deeply in love with {wife.get("husband", "lover")}'
'She is deeply in love with lover'
Добавление элементов с помощью setdefault()
Можно добавить элемент в словарь таким образом:
wife = {'name': 'Rose', 'age': 33}
if 'has_hair' not in wife:
wife['has_hair'] = True
Используя метод setdefault, мы можем сделать тот же код короче:
wife = {'name': 'Rose', 'age': 33}
wife.setdefault('has_hair', True)
wife
{'name': 'Rose', 'age': 33, 'has_hair': True}
Удаление элементов
pop()
Метод pop() удаляет и возвращает элемент по заданному ключу.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.pop('age')
33
wife
{'name': 'Rose', 'hair': 'brown'}
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
pop() при вызове на словаре?popitem()
Метод popitem() удаляет последний элемент в словаре и возвращает его.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.popitem()
('hair', 'brown')
wife
{'name': 'Rose', 'age': 33}
del
Метод del удаляет элемент по заданному ключу.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del wife['age']
wife
{'name': 'Rose', 'hair': 'brown'}
clear()
Метод clear() удаляет все элементы в словаре.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.clear()
wife
{}
Проверка ключей в словаре
person = {'name': 'Rose', 'age': 33}
'name' in person.keys()
True
'height' in person.keys()
False
'skin' in person # You can omit keys()
False
Проверка значений в словаре
person = {'name': 'Rose', 'age': 33}
'Rose' in person.values()
True
33 in person.values()
True
Красивый вывод (Pretty Printing)
import pprint
wife = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(wife)
{'age': 33,
'eye_color': 'brown',
'hair_color': 'brown',
'has_hair': True,
'height': 1.6,
'name': 'Rose'}
Объединение двух словарей
Для Python 3.5+:
dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_b, **dict_a}
dict_c
{'a': 1, 'b': 3, 'c': 4}
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
{**dict_b, **dict_a}, что произойдет, если у обоих словарей есть один и тот же ключ?dict_b перезаписывает значение из dict_adict_a перезаписывает значение из dict_b