← Назад к вопросам

В чем разница между списком и словарем?

1.3 Junior🔥 201 комментариев
#Python

Комментарии (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 тестирования: используй список для последовательностей, словарь для структурированных данных и поиска по ключам.