# Словари и их методы

### **1. Что такое словарь**

* Словарь — это **неупорядоченная коллекция пар «ключ: значение»**.
* Ключи должны быть **уникальными и неизменяемыми** (например, строки, числа, кортежи).
* Значения могут быть **любого типа**.

```python
user = {"username": "alice", "password": "123"}
print(user["username"])  # alice
```

***

### **2. Основные методы словарей**

| Метод                           | Описание                                                           |
| ------------------------------- | ------------------------------------------------------------------ |
| `dict.get(key, default)`        | Возвращает значение по ключу, если нет ключа — `default`           |
| `dict.keys()`                   | Возвращает объект с ключами словаря                                |
| `dict.values()`                 | Возвращает объект со значениями словаря                            |
| `dict.items()`                  | Возвращает объект с парами `(ключ, значение)`                      |
| `dict.update(other_dict)`       | Обновляет словарь значениями из другого словаря                    |
| `dict.pop(key, default)`        | Удаляет ключ и возвращает значение, если ключа нет — `default`     |
| `dict.popitem()`                | Удаляет и возвращает пару `(ключ, значение)`                       |
| `dict.clear()`                  | Очищает словарь                                                    |
| `dict.setdefault(key, default)` | Возвращает значение по ключу, если ключа нет — добавляет `default` |
| `dict.copy()`                   | Создаёт поверхностную копию словаря                                |

***

### **3. Примеры использования**

```python
user = {"username": "alice", "password": "123"}

# Получение значений
print(user.get("username"))       # alice
print(user.get("email", "none")) # none

# Добавление и обновление
user["email"] = "alice@example.com"
user.update({"password": "456"})

# Удаление
user.pop("email")
last_item = user.popitem()  # удаляет последнюю добавленную пару

# Просмотр
print(user.keys())    # dict_keys(['username', 'password'])
print(user.values())  # dict_values(['alice', '456'])
print(user.items())   # dict_items([('username', 'alice'), ('password', '456')])
```

***

### **4. Применение в автотестах**

* **Обработка JSON/API ответов**

```python
response = {"status": "ok", "data": {"id": 1, "name": "Alice"}}
assert response.get("status") == "ok"
```

* **Генерация тестовых данных**

```python
test_user = {}
test_user.setdefault("username", "testuser")
test_user.setdefault("password", "123")
```

* **Фильтрация данных**

```python
users = [{"name": "Alice", "active": True}, {"name": "Bob", "active": False}]
active_users = [u for u in users if u.get("active")]
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/slovari-i-ikh-metody.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
