← Назад к вопросам
В чем разница между словарем и массивом в 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"
}
}
Вывод
Словарь предпочтителен для быстрого поиска и организации структурированных данных. Список используется для упорядоченных коллекций и когда важен порядок элементов. В практике часто используются вместе: словари с ключами и списками как значения для максимальной гибкости.