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

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

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

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Словарь vs Массив (Список) в Python

Основные типы коллекций в Python — это список (list) и словарь (dict). Они различаются по способу организации данных и доступа к ним.

Структура и организация

Список (Array/List):

# Упорядоченная коллекция, доступ по индексу
fruits = ["apple", "banana", "cherry"]
# Индекс:      0         1           2

print(fruits[0])    # "apple"
print(fruits[-1])   # "cherry" (последний элемент)
print(len(fruits))  # 3

Словарь (Dictionary/Hash Map):

# Неупорядоченная коллекция (с Python 3.7+ сохраняет порядок вставки)
user = {"name": "Alice", "age": 30, "city": "New York"}
# Ключ:  "name"        "age"       "city"

print(user["name"])     # "Alice"
print(user.get("age"))  # 30
print(len(user))        # 3

Ключевые различия

ХарактеристикаСписокСловарь
ИндексЧисловой (0, 1, 2...)Любой уникальный ключ (str, int, tuple)
ПорядокУпорядочен по индексуУпорядочен по вставке (Python 3.7+)
ДоступПо позицииПо ключу (быстрее)
Скорость поискаO(n) линейныйO(1) константный
ИзменяемостьИзменяемыйИзменяемый
ДублированиеЭлементы могут повторятьсяКлючи уникальны

Практические примеры

Когда использовать список:

# 1. Упорядоченные данные
students = ["Alice", "Bob", "Charlie"]
for i, student in enumerate(students):
    print(f"{i}: {student}")

# 2. Нужна возможность дублирования
temperatures = [20.5, 21.0, 20.5, 22.1]  # 20.5 повторяется

# 3. Операции с индексами
scores = [95, 87, 92]
average = sum(scores) / len(scores)  # 91.33

# 4. Слайсинг
first_three = scores[:3]
last_two = scores[-2:]

Когда использовать словарь:

# 1. Быстрый поиск по ключу (O(1))
user_by_email = {
    "alice@example.com": {"id": 1, "name": "Alice"},
    "bob@example.com": {"id": 2, "name": "Bob"}
}
user = user_by_email["alice@example.com"]  # Быстро!

# 2. Структурированные данные с именованными полями
person = {
    "name": "Alice",
    "age": 30,
    "email": "alice@example.com",
    "skills": ["Python", "SQL", "JavaScript"]
}

# 3. Подсчёт частоты элементов
from collections import Counter
word_count = Counter(["apple", "banana", "apple", "cherry", "banana", "apple"])
print(word_count)  # {"apple": 3, "banana": 2, "cherry": 1}

# 4. Динамическое добавление полей
config = {}
config["host"] = "localhost"
config["port"] = 5432
config["database"] = "myapp"

Операции

# СПИСОК
list_ops = [1, 2, 3]
list_ops.append(4)          # Добавить в конец: [1, 2, 3, 4]
list_ops.insert(0, 0)       # Вставить в позицию: [0, 1, 2, 3, 4]
list_ops.remove(2)          # Удалить элемент: [0, 1, 3, 4]
list_ops.pop()              # Удалить последний: [0, 1, 3]

# СЛОВАРЬ
dict_ops = {"a": 1, "b": 2}
dict_ops["c"] = 3           # Добавить ключ
dict_ops.update({"d": 4})   # Обновить несколько
del dict_ops["a"]           # Удалить ключ
dict_ops.pop("b")           # Удалить и вернуть значение

Сложность операций

# СПИСОК
fruits = ["apple", "banana", "cherry"]  # 1000000 элементов

fruits[999999]      # O(1) - быстро! Прямой доступ
"banana" in fruits  # O(n) - медленно! Линейный поиск
fruits.append("date")  # O(1) в среднем
fruits.insert(0, "x")  # O(n) - нужно переместить все элементы!

# СЛОВАРЬ
users = {"alice@ex.com": {...}, ...}  # 1000000 ключей

users["alice@ex.com"]  # O(1) - быстро! Hash lookup
"alice@ex.com" in users  # O(1) - быстро!
users["new@ex.com"] = {...}  # O(1)

Выбор структуры данных

# ✅ Список: когда важен порядок и позиция
ranking = ["first_place", "second_place", "third_place"]

# ✅ Словарь: когда нужна быстрая фильтрация по ключу
cache = {"user:1": user_data, "user:2": user_data}

# ✅ Комбинация: часто используются вместе
project = {
    "name": "MyApp",
    "version": "1.0",
    "team_members": ["Alice", "Bob", "Charlie"],  # Список внутри словаря
    "milestones": {
        "v1.0": "2024-01-01",
        "v1.1": "2024-03-01"
    }
}

Вывод

Словарь предпочтителен для быстрого поиска и организации структурированных данных. Список используется для упорядоченных коллекций и когда важен порядок элементов. В практике часто используются вместе: словари с ключами и списками как значения для максимальной гибкости.

В чем разница между словарем и массивом в Python? | PrepBro