Ты уже знаешь, что переменная — это коробка. А списки — это нумерованные полки, где у каждого элемента есть свой номер (0,1,2...).
Но что, если тебе нужно хранить данные так: «у Саши возраст 25», «у Оли город Москва»?
Встречай словарь (dict) — самую офигенную структуру в Python. Он не нумерует, а даёт каждому значению персональное имя-ключ.
1. Как выглядит словарь и как его создать
Словарь — это {ключ: значение}. Ключ должен быть уникальным, как паспорт.
```python
# Самый простой способ
user = {
"name": "Анна",
"age": 28,
"city": "Казань"
}
# Можно создать через dict()
car = dict(brand="Tesla", year=2023) # {'brand': 'Tesla', 'year': 2023}
```
Важно: ключами могут быть строки, числа и даже кортежи. Но не списки (они изменяемые, Python не разрешит). Значениями может быть что угодно: строки, числа, списки, другие словари.
2. Залезаем в словарь и достаём данные
Самый частый вопрос новичка: «А как мне взять возраст Анны?» Проще пареной репы:
```python
user = {"name": "Анна", "age": 28, "city": "Казань"}
# Способ 1: через квадратные скобки
print(user["age"]) # 28
# Способ 2: через метод get (безопасный)
print(user.get("name")) # Анна
print(user.get("salary")) # None (не упал с ошибкой)
```
В чём разница? Если ключа нет, user["salary"] вызовет KeyError и программа ляжет. user.get("salary") вернёт None — ошибки не будет. Всегда используй .get() во взрослых проектах.
3. Добавляем, меняем, удаляем (читай — чиним реальность)
Словари изменяемые. Это значит, что ты можешь добавлять новые факты и править старые.
```python
phonebook = {"Олег": 89123456789}
# Добавить
phonebook["Марина"] = 89223334455
# Изменить
phonebook["Олег"] = 89991112233
# Удалить
del phonebook["Марина"]
# Вынуть значение и удалить за раз
old_value = phonebook.pop("Олег") # удалили Олега, значение сохранили
```
4. Где это вообще пригодится? Жизненные примеры
Вот 3 места, где без словарей — как без рук:
1. Настройки приложения — config = {"theme": "dark", "volume": 70}
2. Ответ API (почти любой сервер возвращает JSON — это почти словарь)
3. Быстрый поиск — проверить, есть ли элемент, в списке за O(1), а не за O(n)
```python
# Быстрая проверка: студент сдал экзамен?
passed = {"Анна": True, "Олег": False, "Саша": True}
if passed.get("Олег"):
print("Молодец!")
else:
print("Пересдача")
```
5. Полезные плюшки, о которых молчат в школе
5.1. Все ключи, значения или пары разом
```python
d = {"a": 1, "b": 2, "c": 3}
print(d.keys()) # dict_keys(['a', 'b', 'c'])
print(d.values()) # dict_values([1, 2, 3])
print(d.items()) # dict_items([('a',1), ('b',2), ('c',3)])
```
Связка items() + цикл for — это бомба:
```python
for key, value in d.items():
print(f"Ключ {key} ведёт к {value}")
```
5.2. Слияние словарей (Python 3.9+)
```python
defaults = {"theme": "light", "lang": "ru"}
user_prefs = {"theme": "dark"}
settings = defaults | user_prefs # {'theme': 'dark', 'lang': 'ru'}
# user_prefs перезаписал defaults
```
5.3. Генератор словаря (list comprehension, но для dict)
```python
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
```
6. Главный лайфхак для чайников
Никогда не доверяй пользовательскому вводу как ключу без проверки. И не пытайся использовать список в качестве ключа — будет TypeError.
И помни: порядок элементов в словаре сохраняется (начиная с Python 3.7), но рассчитывать на него в логике кода — моветон.
А теперь к делу
Вот тебе рабочий кусок кода для первого запуска:
```python
shop = {
"хлеб": 50,
"молоко": 80,
"сыр": 350
}
product = input("Что купить? ")
if product in shop:
print(f"Цена: {shop[product]} руб.")
else:
print("Нет в наличии")
```
Сделал — уже не ноль. А если понял — красава.
---
Подписывайся, если хочешь разобрать:
· список внутри словаря (и словарь внутри списка)
· как превратить два списка в словарь одной строкой zip()
· defaultdict — словарь с автозаполнением
Не тупи — запускай код. ✊