Добавить в корзинуПозвонить
Найти в Дзене

Словари в Python: та самая штука, которая знает всё про всех

Ты уже знаешь, что переменная — это коробка. А списки — это нумерованные полки, где у каждого элемента есть свой номер (0,1,2...).
Но что, если тебе нужно хранить данные так: «у Саши возраст 25», «у Оли город Москва»?
Встречай словарь (dict) — самую офигенную структуру в Python. Он не нумерует, а даёт каждому значению персональное имя-ключ.
1. Как выглядит словарь и как его создать

Ты уже знаешь, что переменная — это коробка. А списки — это нумерованные полки, где у каждого элемента есть свой номер (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 — словарь с автозаполнением

Не тупи — запускай код. ✊