## Основні методи
| Метод | Що робить | Повертає |
|---|---|---|
| `d[key]` | Отримати значення (KeyError якщо немає) | значення |
| `d.get(key)` | Отримати значення або `None` | значення або None |
| `d.get(key, default)` | Отримати значення або default | значення або default |
| `d[key] = val` | Встановити / оновити ключ | — |
| `d.setdefault(key, default)` | Встановити default тільки якщо ключа немає | значення |
| `d.update(other)` | Злити `other` у `d` (на місці) | `None` |
| `d.pop(key)` | Видалити і повернути значення (KeyError якщо немає) | значення |
| `d.pop(key, default)` | Видалити і повернути значення або default | значення або default |
| `d.popitem()` | Видалити і повернути останню пару (key, value) | (key, value) |
| `d.keys()` | Представлення всіх ключів | dict_keys |
| `d.values()` | Представлення всіх значень | dict_values |
| `d.items()` | Представлення всіх пар (key, value) | dict_items |
| `d.copy()` | Поверхнева копія | новий dict |
| `d.clear()` | Видалити всі записи | `None` |
| `key in d` | Перевірити наявність ключа | bool |
| `len(d)` | Кількість пар ключ-значення | int |
## Синтаксис dict comprehension
```python
{key_expr: val_expr for var in iterable}
{key_expr: val_expr for var in iterable if condition}
{key_expr: val_expr for k, v in d.items()}
```
## Злиття словників
```python
# Python 3.5+: розпакування
merged = {**d1, **d2}
# Python 3.9+: оператор |
merged = d1 | d2
d1 |= d2 # на місці
# Всі версії: update
d1.update(d2)
```
## Безпечний доступ до вкладених даних
```python
# Ланцюжок .get() щоб уникнути KeyError на будь-якому рівні
value = data.get("user", {}).get("address", {}).get("city", "unknown")
```
## Поширені патерни
```python
# Частота слів
freq = {}
for word in text.split():
freq[word] = freq.get(word, 0) + 1
# Групування за категорією
groups = {}
for item in items:
groups.setdefault(item.category, []).append(item)
# Інвертування
inv = {v: k for k, v in d.items()}
# Фільтрація за значенням
filtered = {k: v for k, v in d.items() if v > 0}
```
Напишіть функцію `get_setting(config, key, default=None)`, яка безпечно читає значення зі словника конфігурації. Якщо ключ є — повертає значення, інакше — `default`. Приклад: `get_setting({"debug": True}, "debug")` → `True`, `get_setting({"debug": True}, "port", 8080)` → `8080`.
Напишіть функцію `word_freq(text)`, яка повертає словник, де кожне слово відповідає кількості його входжень. Слова перекладаються у нижній регістр (для простоти вважайте, що слова розділені лише пробілами). Приклад: `word_freq("the cat sat the cat")` → `{"the": 2, "cat": 2, "sat": 1}`.
def word_freq(text):
pass
print(word_freq("the cat sat the cat"))
# {"the": 2, "cat": 2, "sat": 1}
Рішення
def word_freq(text):
counts = {}
for word in text.lower().split():
counts[word] = counts.get(word, 0) + 1
return counts
print(word_freq("the cat sat the cat"))
# {"the": 2, "cat": 2, "sat": 1}
Напишіть функцію `merge(base, overrides)`, яка повертає новий словник з усіма ключами з `base`, але якщо ключ є у `overrides` — береться значення з `overrides`. Оригінальні словники не повинні змінюватись. Приклад: `merge({"a": 1, "b": 2}, {"b": 99, "c": 3})` → `{"a": 1, "b": 99, "c": 3}`.
Напишіть функцію `remove_key(d, key)`, яка видаляє `key` зі словника `d` якщо він існує, і повертає видалене значення. Якщо ключ не існує — повертає `None` без помилки. Функція має модифікувати `d` на місці. Приклад: `d = {"a": 1, "b": 2}; remove_key(d, "a")` → повертає `1`, `d` стає `{"b": 2}`.
Напишіть функцію `squares_dict(n)` з використанням dict comprehension, яка повертає словник, де ключі — цілі числа від 1 до `n`, а значення — їх квадрати. Приклад: `squares_dict(5)` → `{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}`.
Напишіть функцію `filter_dict(d, min_value)`, яка повертає новий словник, що містить тільки пари ключ-значення, де значення більше або рівне `min_value`. Приклад: `filter_dict({"a": 5, "b": 1, "c": 8, "d": 3}, 4)` → `{"a": 5, "c": 8}`.
def filter_dict(d, min_value):
return {k: v for k, v in d.items() if v >= min_value}
print(filter_dict({"a": 5, "b": 1, "c": 8, "d": 3}, 4))
# {"a": 5, "c": 8}
Напишіть функцію `invert(d)`, яка міняє місцями ключі і значення словника і повертає новий інвертований словник. Вважайте, що всі значення унікальні та хешабельні. Приклад: `invert({"a": 1, "b": 2, "c": 3})` → `{1: "a", 2: "b", 3: "c"}`.
Напишіть функцію `group_by_letter(words)`, яка повертає словник, де кожен ключ — це літера, а значення — відсортований список слів, що починаються з цієї літери. Приклад: `group_by_letter(["apple", "ant", "banana", "bear"])` → `{"a": ["ant", "apple"], "b": ["banana", "bear"]}`.
def group_by_letter(words):
result = {}
for word in words:
key = word[0]
result.setdefault(key, []).append(word)
for key in result:
result[key].sort()
return result
print(group_by_letter(["apple", "ant", "banana", "bear"]))
# {"a": ["ant", "apple"], "b": ["banana", "bear"]}
Напишіть функцію `deep_get(data, *keys)`, яка безпечно отримує значення з вкладених словників за ланцюжком ключів. Повертає `None` якщо будь-який ключ відсутній. Приклад: `deep_get({"user": {"address": {"city": "Kyiv"}}}, "user", "address", "city")` → `"Kyiv"`, `deep_get({"user": {}}, "user", "address", "city")` → `None`.
def deep_get(data, *keys):
for key in keys:
if not isinstance(data, dict):
return None
data = data.get(key)
return data
user = {"user": {"address": {"city": "Kyiv"}}}
print(deep_get(user, "user", "address", "city")) # Kyiv
print(deep_get(user, "user", "phone")) # None
Напишіть функцію `zip_to_dict(keys, values)`, яка створює словник з двох списків однакової довжини. Якщо довжини різні — кидає `ValueError` з повідомленням `"Lists must have the same length"`. Приклад: `zip_to_dict(["a", "b", "c"], [1, 2, 3])` → `{"a": 1, "b": 2, "c": 3}`.
def zip_to_dict(keys, values):
if len(keys) != len(values):
raise ValueError("Lists must have the same length")
return dict(zip(keys, values))
print(zip_to_dict(["a", "b", "c"], [1, 2, 3]))
# {"a": 1, "b": 2, "c": 3}
try:
zip_to_dict(["x", "y"], [1, 2, 3])
except ValueError as e:
print(e)
No split tab
Налаштування cookies
Ми використовуємо необхідні cookies для роботи сайту. З вашого дозволу ми також можемо зберігати налаштування сайту та використовувати аналітичні й рекламні cookies, щоб розуміти використання сайту й підтримувати розвиток проєкту.
* Ви завжди можете змінити свій вибір у налаштуваннях сайту.
Оберіть категорії cookies
Налаштування аналітики
Можна вимкнути аналітику використання платформи. Також можна надіслати в Google Analytics запит на видалення даних про використання цього сайту, пов'язаних із цим браузером.
Навчальний workspace
Навчайтеся, читаючи, запускаючи код і розв'язуючи задачі.
Практикуйте програмування з поясненнями тем, вправами, інструментами browser IDE, перевіркою regex і тренуванням друку коду в одному workspace.
Відкривайте інструменти у вкладках.Вправи, IDE-інструменти й тренажери залишаються доступними як вкладки сайту.
Перемикайтеся без втрати контексту.Переходьте між поясненнями, кодом та утилітами, зберігаючи своє місце.
Використовуйте sidebar як карту.Ліві панелі містять навігацію, налаштування, файли, libraries та керування інструментами.
PythonJavaScriptSQLite
Одна IDE, три практичні режими
Python у браузері.Запускайте невеликі скрипти, пробуйте бібліотеки й тренуйте API-запити без встановлення.
JavaScript для швидких експериментів.Перевіряйте код для браузера й порівнюйте ідеї поруч із навчальними матеріалами.
SQLite для практики з даними.Відкривайте оглядач бази даних, переглядайте таблиці, пишіть запити й вивчайте SQL локально.
ТемаIDE
Працюйте поруч у split tabs
Тримайте інструкції перед очима.Відкрийте вправу або довідкову сторінку поруч з IDE, замість постійних перемикань.
Порівнюйте інструменти під час навчання.Розміщуйте перевірки regex, пояснення та експерименти з кодом поруч, коли це потрібно для задачі.
Закрийте split, коли завершите.Workspace повернеться до однієї сфокусованої вкладки, а відкриті вкладки сайту залишаться доступними.
Тренажер друку коду
Або звичайного тексту
Тренажер розрахований на фізичну клавіатуру.Відкрийте цей розділ на ноутбуці або комп'ютері з широким екраном. На телефоні тренування друку не працюватиме коректно.
Швидкість: 0 зн/хв
0 слів/хв
Найкраща швидкість (60с): 0 зн/хв
0 слів/хв
Помилки: 0
Загальний час: 0.0 с
Щоб тренувати сліпий друк, не підглядайте на фізичну клавіатуру.