Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Список (List) vs Словарь (Dict)
Определение
Список (List) — упорядоченная коллекция элементов, доступных по индексу (0, 1, 2...)
Словарь (Dict) — коллекция пар ключ-значение, доступных по ключу
Список
Характеристики:
- Упорядочен (сохраняет порядок)
- Доступ по индексу (0-based)
- Допускает дубликаты
- Изменяемый (mutable)
- Квадратные скобки: []
Примеры:
users = ["John", "Jane", "Bob"] # Индексы: 0, 1, 2
print(users[0]) # John
print(users[1]) # Jane
print(len(users)) # 3
# Изменение
users[0] = "Alice" # Заменяем первый элемент
users.append("Charlie") # Добавляем в конец
users.insert(1, "David") # Вставляем на позицию 1
users.remove("Jane") # Удаляем элемент
# Итерация
for user in users:
print(user)
# Срезы (slicing)
print(users[0:2]) # Первые два элемента
print(users[-1]) # Последний элемент
Словарь
Характеристики:
- Неупорядочен (но в Python 3.7+ сохраняет порядок вставки)
- Доступ по ключу (уникальный)
- Нет дубликатов ключей
- Изменяемый (mutable)
- Фигурные скобки: {}
Примеры:
user = {
"name": "John",
"age": 30,
"email": "john@test.com"
}
print(user["name"]) # John
print(user.get("age")) # 30 (безопаснее)
# Изменение
user["age"] = 31
user["city"] = "New York"
user.pop("email") # Удаляем ключ
# Проверка наличия ключа
if "name" in user:
print(user["name"])
# Итерация
for key, value in user.items():
print(f"{key}: {value}")
# Только ключи
for key in user.keys():
print(key)
# Только значения
for value in user.values():
print(value)
Сравнение
| Характеристика | Список | Словарь |
|---|---|---|
| Синтаксис | [1, 2, 3] | {"a": 1, "b": 2} |
| Доступ | По индексу | По ключу |
| Упорядоченность | Да | Да (с Python 3.7+) |
| Дубликаты | Разрешены | Ключи уникальны |
| Производительность поиска | O(n) | O(1) |
| Использование памяти | Меньше | Больше |
Практические примеры
Используй список для:
# Последовательность элементов
scores = [100, 95, 88, 92]
# Когда порядок важен
todo_items = ["Task 1", "Task 2", "Task 3"]
# Простые значения
colors = ["red", "green", "blue"]
Используй словарь для:
# Связанные данные
user = {
"id": 1,
"name": "John",
"email": "john@test.com",
"role": "admin"
}
# Конфигурация
config = {
"host": "localhost",
"port": 5432,
"database": "mydb",
"user": "admin"
}
# Маппинг
age_by_name = {
"John": 30,
"Jane": 28,
"Bob": 35
}
В тестировании
import pytest
def test_list_operations():
users = ["John", "Jane", "Bob"]
assert len(users) == 3
assert users[0] == "John"
assert "Jane" in users
users.append("Alice")
assert len(users) == 4
def test_dict_operations():
user = {"name": "John", "age": 30}
assert user["name"] == "John"
assert user.get("age") == 30
assert user.get("city", "Unknown") == "Unknown"
user["city"] = "New York"
assert "city" in user
def test_api_response_parsing():
"""API часто возвращает список словарей"""
response = [
{"id": 1, "name": "John", "email": "john@test.com"},
{"id": 2, "name": "Jane", "email": "jane@test.com"},
{"id": 3, "name": "Bob", "email": "bob@test.com"}
]
assert len(response) == 3
assert response[0]["name"] == "John"
assert response[1]["email"] == "jane@test.com"
# Поиск в списке
john = next((user for user in response if user["id"] == 1))
assert john["name"] == "John"
def test_dict_with_lists():
"""Словарь содержит список"""
data = {
"users": ["John", "Jane", "Bob"],
"count": 3
}
assert len(data["users"]) == 3
assert data["count"] == 3
assert data["users"][0] == "John"
Примеры JSON парсинга
import json
# JSON список → Python список
json_list = '[1, 2, 3, 4, 5]'
python_list = json.loads(json_list)
print(python_list[0]) # 1
# JSON объект → Python словарь
json_dict = '{"name": "John", "age": 30}'
python_dict = json.loads(json_dict)
print(python_dict["name"]) # John
# JSON массив объектов → Python список словарей
json_data = '''
[
{"id": 1, "name": "John"},
{"id": 2, "name": "Jane"}
]
'''
python_data = json.loads(json_data)
print(python_data[0]["name"]) # John
Производительность
import timeit
# Поиск в списке — O(n)
my_list = list(range(1000))
print(timeit.timeit(lambda: 999 in my_list, number=100000))
# Поиск в словаре — O(1)
my_dict = {i: i for i in range(1000)}
print(timeit.timeit(lambda: 999 in my_dict, number=100000))
# Словарь намного быстрее!
Для QA тестирования: используй список для последовательностей, словарь для структурированных данных и поиска по ключам.