
В Python словари — это универсальная и мощная структура данных, которая позволяет хранить и извлекать данные с использованием пар ключ-значение. В отличие от списков или кортежей, которые используют числовые индексы для доступа к элементам, словари используют ключи в качестве уникальных идентификаторов. Это делает словари невероятно удобными, когда вам нужно сопоставить значения с определенными ключами или выполнить эффективный поиск.
Создать словарь очень просто; вы используете фигурные скобки {} и разделяете каждую пару ключ-значение двоеточием. Например
my_dict = {'key1': value1, 'key2': value2, 'key3': value3}.
Эта фундаментальная концепция словарей в Python является краеугольным камнем для различных операций в задачах программирования. Теперь мы изучим основы операций CRUD, используя их встроенные методы.
Создание словарей
Словари Python — это структуры данных, в которых хранятся пары ключ-значение. Есть несколько способов создания словарей в Python.
- Кудрявые скобки {} с парами "ключ-значение"
Самый распространенный способ создания словаря — использование фигурных скобок для заключения пар ключ-значение, разделенных двоеточиями.
person = {
"name": "John Doe",
"age": 30,
"city": "New York"
}
# {'name': 'John Doe', 'age': 30, 'city': 'New York'}
2. Использование списка
Вы можете использовать понимание списка, чтобы создать словарь из списка пар ключ-значение. Это полезно, если вы хотите преобразовать или отфильтровать элементы перед созданием словаря:
keys = ["name", "age", "city"]
values = ["Alice Johnson", 28, "Los Angeles"]
person = {key: value for key, value in zip(keys, values)}
# {'name': 'Alice Johnson', 'age': 28, 'city': 'Los Angeles'}
3. Понимание словаря
Подобно генераторам списков, вы также можете создавать словари, используя генераторы словарей. Это предполагает создание нового словаря путем краткого указания ключей и значений:
keys = ["name", "age", "city"]
values = ["Michael Brown", 35, "Chicago"]
person = {keys[i]: values[i] for i in range(len(keys))}
# {'name': 'Michael Brown', 'age': 35, 'city': 'Chicago'}
4. Конструктор dict()
Вы можете использовать встроенный конструктор dict() для создания словаря из последовательности пар ключ-значение или из другого словаря.
dict(name="Jane Smith", age=25, city="San Francisco")
# {'name': 'Jane Smith','age': 25, 'city': 'San Francisco'}
Вы также можете создать словарь из списка кортежей, используя конструктор dict():
dict([
("name", "Alice"),
("age", 30),
("occupation", "Engineer")
])
# {'name': 'Alice', 'age': 30, 'occupation': 'Engineer'}
5. Использование метода fromkeys()
Метод fromkeys() создает новый словарь с указанными ключами и значением по умолчанию для каждого ключа:
синтаксис: dictionary.fromkeys(keys, value)
value — Необязательно. Значение для всех ключей. Значение по умолчанию: Нет.
# Using the fromkeys() method
keys = ["name", "age"]
default_value = "Not Available"
dict.fromKeys(keys) #{'name': None, 'age': None}
dict.fromkeys(keys, default_value) # {'name': 'Not Available', 'age': 'Not Available'}
6.Использование функции zip()
Функцию zip() можно использовать для объединения двух или более последовательностей в пары, которые затем можно использовать для создания словаря:
keys = ["name", "age", "city"]
values = ["Sophia Williams", 22, "Houston"]
dict(zip(keys, values))
# {'name': 'Sophia Williams', 'age': 22, 'city': 'Houston'}
Чтение словарей
Далее, переходя к чтению данных в словарях Python, у вас есть различные методы доступа к значениям.
- Использование квадратных скобок [ ]
Вы можете получить доступ к значениям из словаря, используя ключи в качестве индекса в квадратных скобках.
countries = {
"USA": "New York",
"Japan": "Tokyo",
"France": "Paris"
}
countries["USA"] # New York
countries["Japan"] # Tokyo
countries["France"] # Paris
person.name # This will result in an AttributeError
2. Использование метода get()
Метод get() позволяет получить значение из словаря с помощью ключа. Он также предоставляет значение по умолчанию, если ключ отсутствует.
синтаксис: dictionary.get(keyname, value)
value —Необязательно. Значение, возвращаемое, если указанный ключ не существует.
Значение по умолчанию Нет
cities = {
"Germany": "Berlin",
"China": "Beijing"
}
cities.get("Germany") # Berlin
cities.get("India") # None if default value isn't provided
cities.get("USA", "City not found") # "City not found"
3. Использование методов keys() и values()
Метод keys() возвращает список всех ключей словаря, а метод values() возвращает список всех значений. Эти методы могут быть полезны, когда вам нужно работать только с ключами или значениями.
синтаксис: dictionary.keys() и dictionary.values()
countries = {
"Mexico": "Mexico City",
"United Kingdom": "London",
"Russia": "Moscow"
}
countries.keys() # dict_keys(['Mexico', 'United Kingdom', 'Russia'])
countries.values() # dict_values(['Mexico City', 'London', 'Moscow'])
4. Использование метода items():
Метод items() возвращает список кортежей, каждый из которых состоит из ключа и соответствующего ему значения. Вы можете использовать этот метод для перебора как ключей, так и значений.
countries = {
"Canada": "Toronto",
"Italy": "Rome"
}
countries.items() # dict_items([('Canada', 'Toronto'), ('Italy', 'Rome')])
5. Использование цикла (for…in)
Вы можете перебирать ключи словаря и получать соответствующие значения с помощью цикла.
countries = {
"Brazil": "Rio de Janeiro",
"Australia": "Sydney"
}
for country in countries:
city = countries[country]
print(f"The city in {country} is {city}")
# The city in Brazil is Rio de Janeiro
# The city in Australia is Sydney
Обновление словарей
Словари Python изменяемы, что означает, что вы можете обновлять их содержимое после создания. Вот различные способы обновления словарей.
# dictionary with car information
car = {
"make": "Toyota",
"model": "Camry",
"year": 2020
}
# {'make': 'Toyota', 'model': 'Camry', 'year': 2020}
- Использование квадратных скобок [ ]
Вы можете использовать квадратные скобки для обновления или добавления значений в словарь, напрямую присваивая значение определенному ключу.
car["year"] = 2021 # update an existing value
car["color"] = "Blue" # or make a new one
# car = {'make': 'Toyota', 'model': 'Camry', 'year': 2021, 'color': 'Blue'}
2. Использование метода update()
Метод update() позволяет объединить содержимое одного словаря с другим. В качестве аргумента он может принимать либо другой словарь, либо итерацию пар ключ-значение:
additional_data = {
"year": 2022, # Update year
"mileage": 15000 # Add mileage
}
car.update(additional_data)
# car = {'make': 'Toyota', 'model': 'Camry', 'year': 2022, 'mileage': 15000}
Помните, что если вы попытаетесь обновить несуществующий ключ, используя квадратные скобки, Python добавит этот ключ с присвоенным значением. Однако если вы используете метод update(), метод will not create new keys. Также важно отметить, что ключи словаря уникальны, поэтому попытка добавить дубликат ключа приведет к перезаписи существующего значения.
3. Использование метода setdefault()
Метод setdefault() используется для вставки ключа со значением по умолчанию, если он не существует в словаре. Этот метод также используется для чтения данных. Он возвращает значение ключа, независимо от того, был ли он недавно вставлен или уже существовал.
car.setdefault("year",2023) #return 2020 since its alreay in the dictioanry
car.setdefault("previous_owners", 2) # Adding a new key with a default value
# car = {'make': 'Toyota', 'model': 'Camry', 'year': 2020, 'previous_owners': 2}
4. Использование конструктора dict()
Вы также можете создать новый словарь, объединив два или более словарей или пары ключ-значение с помощью конструктора dict().
new_data = {
"model": "Corolla", # Update model
"color": "Red" # Update color
}
updated_car = dict(car, **new_data)
car # {'make': 'Toyota', 'model': 'Camry', 'year': 2020}
updated_car # {'make': 'Toyota', 'model': 'Corolla', 'year': 2020, 'color': 'Red'}
5. Использование метода .union()
Объединение двух словарей означает объединение ключей и значений из обоих словарей в один словарь. В Python 3.9 появился оператор | как сокращение для объединения словарей. Вот как вы можете использовать метод .union() и оператор |.
# Original dictionaries
car_data_one = {
"make": "Toyota",
"model": "Camry"
}
car_data_two = {
"model": "Corolla",
"color": "Blue"
}
union_car_data = car_data_one | car_data_two
# or car_data_one.union(car_data_two)
union_car_data # {'make': 'Toyota', 'model': 'Corolla', 'color': 'Blue'}
Удаление словарей
Любое творение может быть уничтожено, и это относится даже к словарям Python. Вот способы добиться этого
groceries = {"apples": 5, "bananas": 10, "bread": 2}
- Использование оператора
del
Вы можете использовать оператор del, чтобы полностью удалить словарь или удалить определенную пару ключ-значение.
del groceries["bananas"] # Delete the "bananas" key and its value
groceries # {'apples': 5, 'bread': 2}
del groceries # Delete the entire 'groceries' dictionary
groceries # NameError: name 'groceries' is not defined
2.Использование метода clear()
Метод clear() используется для удаления всех пар ключ-значение из словаря, фактически очищая его.
groceries.clear() # Removes all key-value pairs from the 'groceries'
groceries # {}
3. Использование метода pop()
Метод pop() используется для удаления ключа из словаря и возврата связанного с ним значения. Вы можете указать значение по умолчанию, если ключ не существует.
синтаксис dictionar.pop(keyname, defaultvalue)
defaultvalueНеобязательно. Значение, возвращаемое, если указанный ключ не существует.
Если этот параметр не указан и элемент с указанным ключом не найден, возникает ошибка.
# Remove "bananas" key and get its value
groceries.pop("bananas") # 10
# Remove nonexistent key with default value 0
groceries.pop("nonexistent_key", 0) # 0
# Remove nonexistent key without default value
groceries.pop("nonexistent_key") # KeyError: 'nonexistent_key'
4. Использование метода popitem()
Метод popitem() удаляет и возвращает произвольную пару ключ-значение из словаря. Это полезно, если вы хотите удалить элементы из словаря в порядке LIFO (последний вошел, первый вышел).
В версиях до 3.7 метод popitem() удаляет случайный элемент.
синтаксис dictionary.popitem()
groceries.popitem() # groceries.popitem()
# what if dictionary is empty
empty_dict = {}
empty_dict.popitem() # groceries.popitem()
Копирование словарей
Подобно писцу, тщательно копирующему древние рукописи, вы можете создавать дубликаты словарей Python, используя различные методы.
pokemons = {"Pikachu": "Electric", "Charmander": "Fire", "Squirtle": "Water"}
- Использование метода
copy()
Метод copy() создает неполную копию словаря, что означает, что ключи и значения копируются, но если сами значения являются изменяемыми объектами (например, списками), копируются ссылки на эти объекты, а не сами объекты.
clone = pokemons.copy() # {'Pikachu': 'Electric', 'Charmander': 'Fire', 'Squirtle': 'Water'}
# updating the values affects both the dict
clone['Pikachu'] = "Grass"
pokemons # {'Pikachu': 'Electric', 'Charmander': 'Fire', 'Squirtle': 'Water'}
clone # {'Pikachu': 'Grass', 'Charmander': 'Fire', 'Squirtle': 'Water'}
# effect of swallow copy
pokemons = { 0 : ["Pikachu","Electric"], 1 : ["Charmander","Fire"]}
clone = pokemons.copy() # try using copy.deepcopy() instead
clone[0][1] = "Grass"
pokemons # {0: ['Pikachu', 'Grass'], 1: ['Charmander', 'Fire']}
clone # {0: ['Pikachu', 'Grass'], 1: ['Charmander', 'Fire']}
2.Использование конструктора dict()
Вы можете создать новый словарь, передав существующий словарь конструктору dict(). Это создает новый словарь с теми же парами ключ-значение.
# which doesn't have any side effects like copy()
clones = dict(pokemons) # {'Pikachu': 'Electric', 'Charmander': 'Fire', 'Squirtle': 'Water'}
3.Использование словарного понимания
Вы можете создать копию словаря, используя словарное понимание. Этот метод позволяет фильтровать или преобразовывать ключи и значения в процессе копирования.
# Has the same behaviour like copy()
# that is, it performs shallow copy
clones = {name: type for name, type in pokemons.items()}
# {'Pikachu': 'Electric', 'Charmander': 'Fire', 'Squirtle': 'Water'}
4. Использование распаковки словаря
Вы можете создать копию словаря, распаковав его пары ключ-значение в новый словарь и выполнив поверхностное копирование.
# it performs shallow copy
clones = {**pokemons} # {'Pikachu': 'Electric', 'Charmander': 'Fire', 'Squirtle': 'Water'}
5.Использование метода copy() с вложенными объектами
Если ваш словарь содержит изменяемые объекты (например, списки) и вы хотите создать настоящую независимую копию (глубокую копию), вы можете использовать функцию copy.deepcopy() из модуля copy.
import copy
pokemons = { 0 : ["Pikachu","Electric"], 1 : ["Charmander","Fire"]}
clone = copy.deepcopy(pokemons)
clone[0][1] = "Grass"
pokemons # {0: ['Pikachu', 'Electric'], 1: ['Charmander', 'Fire']}
clone # {0: ['Pikachu', 'Grass'], 1: ['Charmander', 'Fire']}
Абсолютно! 🪄 Словари Python — это волшебные книги заклинаний для программистов. Они помогут вам управлять данными в парах «ключ-значение» — очень удобно для организации вещей.
Мы совершили экскурсию по созданию этих волшебников 🧙♂️, заглядывали в их секреты 🔍, меняли заклинания на лету ✨ и даже стирали чары 🧹. Кроме того, мы научились нескольким изящным трюкам копирования, позволяющим создавать новые книги заклинаний 📚, не испортив старые.
Имея в запасе эти хитрости, вы в кратчайшие сроки станете словарным волшебником! 🎩🔮
На этом сегодняшняя порция идей Python подошла к концу! 👋 Пора прощаться, ребята. Помните: кодируйте с радостью, и пусть ваши приключения на Python будут такими же гладкими, как хорошо смазанная машина! 🚀 Оставайтесь любопытными и продолжайте программировать! А сейчас до свидания! 👋👋