## Основные методы
| Метод | Что делает | Возвращает |
|---|---|---|
| `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}
```
Напишите функцию `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"]}
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 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.