> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-dictionaries/polnyi-obzor-slovarei-v-python.md).

# Полный обзор словарей в Python

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

* Основы создания словарей для хранения и доступа к данным
* Лучшие случаи использования словарей
* Добавление и удаление данных в словарях
* Как применять функции и методы к словарям

Оглавление

* [Что такое словари Python?](#chto-takoe-slovari-python)
* [Как словари связаны с наукой о данных?](#kak-slovari-svyazany-s-naukoi-o-dannykh)
* [Работа со словарями Python](#rabota-so-slovaryami-python)
  * [Доступ к элементам в словарях Python](#dostup-k-elementam-v-slovaryakh-python)
  * [Добавление элементов в словари Python](#dobavlenie-elementov-v-slovari-python)
  * [Изменение существующих элементов словаря Python](#izmenenie-sushestvuyushikh-elementov-slovarya-python)
  * [Удаление элементов из словарей в Python](#udalenie-elementov-iz-slovarei-v-python)
* [Методы словаря Python](#metody-slovarya-python)
  * [Доступ к элементам словаря с помощью .items()](#dostup-k-elementam-slovarya-s-pomoshyu-.items)
  * [Доступ к словарю ключей с помощью .keys()](#dostup-k-klyucham-slovarya-s-pomoshyu-.keys)
  * [Доступ к словарю значений с помощью .values()](#dostup-k-znacheniyam-slovarya-s-pomoshyu-.values)
  * [Проверка членства в словарях Python](#proverka-chlenstva-v-slovaryakh-python)
* [Перебор словарей Python](#perebor-slovarei-python)
* [Упорядочены ли словари Python?](#uporyadocheny-li-slovari-python)
* [Упражнение](#uprazhnenie)
* [Заключение и резюме](#zaklyuchenie-i-rezyume)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Что такое словари Python?

<mark style="color:purple;">**Python словари**</mark> — это контейнерные типы данных, как и списки в Python. Словари используют сопоставление ключ-значение, позволяя извлекать значение, ища соответствующий ключ. Они очень похожи на то, что в других языках программирования называется ассоциативными массивами. Это потому, что это массив данных, который ассоциируется с чем-то другим — в данном случае, с ключом.

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

```python
# Получение второго элемента в списке Python
names = ['Nik', 'Kate', 'Evan', 'Kyra']
second_name = names[1]  # Индексация в Python начинается с 0, поэтому второй элемент имеет индекс 1
print(second_name)

# Возвращает: Kate
```

Поскольку словари Python не являются последовательным типом данных, мы не можем просто получить доступ, скажем, к первому элементу. Для доступа к определенному значению в словаре Python мы используем ключ в словаре для доступа к значению.

В Python словаре может быть несколько ключей. Эти ключи должны быть:

* Уникальный – заданный ключ может существовать только один раз
* Неизменяемый – это значит, что ключи должны быть таких типов данных, которые нельзя изменить, например, строки

Думайте о словарях Python как о обычных словарях. Вы можете найти значение слова (т.е. ключ) и оно даст вам соответствующее определение (т.е. его значение).

#### Создание словаря Python

Давайте рассмотрим, как можно создать словарь в Python. Для начала создадим пустой словарь. У нас есть два основных способа сделать это:

```python
# Создание словаря в Python
dictionary1 = {}       # Пустой словарь, созданный с использованием фигурных скобок
dictionary2 = dict()   # Пустой словарь, созданный с использованием функции dict()
```

Мы можем проверить тип этих словарей, используя встроенную функцию

```python
# Проверка типов словарей в Python
print(type(dictionary1))  # Проверяем тип dictionary1
print(type(dictionary2))  # Проверяем тип dictionary2

# Возвращает:
# <class 'dict'>
# <class 'dict'>
```

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

```python
# Создание примерного словаря в Python
nik = {
    'age': 33,  # Возраст
    'location': 'Toronto',  # Местоположение
    'company': 'bemind.gitbook.io',  # Компания
    'hobbies': ['Python', 'Long walks on the beach', 'Travel']  # Хобби
}
```

Здесь мы видим, что смогли встроить несколько разных элементов в качестве значений. Например, у нас есть целое число (представляющее возраст), строки (представляющие, скажем, местоположение) и даже списки!

Вы не обязаны писать это на разных строках, но так легче читать. Мы могли бы сделать то же самое, просто написав:

```python
# Создание примерного словаря в Python
nik = {
    'age': 33,  # Возраст
    'location': 'Toronto',  # Местоположение
    'company': 'bemind.gitbook.io',  # Компания
    'hobbies': ['Python', 'Long walks on the beach', 'Travel']  # Хобби
}
```

Теперь, когда у вас есть хорошее понимание того, как создавать словари в Python, давайте взглянем на то, как их использовать.

### Как словари связаны с наукой о данных?

На этом этапе вы можете задаться вопросом, как связаны словари с наукой о данных? Когда мы получаем данные из интернета, они часто приходят в формате, известном как JSON (**J**ava**S**cript **O**bject **N**otation). Этот формат очень похож на формат словарей в Python.

Знание работы с Python-словарями позволяет легко загружать данные из интернета и манипулировать ими. Этот формат невероятно распространен и предоставляет значительно большую гибкость в доступе к данным из различных источников.

### Работа со словарями Python

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

#### Доступ к элементам в словарях Python

Существуют два основных способа доступа к элементам внутри словаря. Можно использовать квадратные скобки, `[]`, аналогично обращению к элементу списка по его индексу. Также можно использовать метод `.get()`

Давайте посмотрим, как мы можем использовать квадратные скобки для доступа к элементу.

```python
# Доступ к элементам словаря с помощью квадратных скобок
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
print(info['name'])  # Получаем значение по ключу 'name'

# Возвращает: Nik
```

Это было легко! Одним из недостатков использования метода доступа через квадратные скобки является то, что он плохо работает с несуществующими элементами.

Попробуйте запустить приведенный ниже код для доступа к элементу, который не существует, например, `'hobbies'`, чтобы увидеть, что произойдет:

Мы видим, что при попытке доступа к несуществующему элементу выбрасывается `KeyError`. Это указывает на то, что ключ не существует. Хуже всего то, что это фактически приводит к сбою нашей программы (если мы явно не обрабатываем эту ошибку).

Один из способов обойти это - использовать метод `.get()`. Метод `.get()` просто вернет значение `None`, когда ключ не существует.

Метод работает путем применения его к словарю и передачи ключа, значение которого мы хотим вернуть. Давайте посмотрим, как мы можем использовать это для возврата значения для `'name'`

```python
# Доступ к элементам словаря с помощью метода get
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
print(info.get('name'))  # Получаем значение по ключу 'name' с помощью метода get

# Возвращает: Nik
```

Одно из преимуществ использования метода `.get()` заключается в том, что мы можем передать значение по умолчанию, которое мы хотим получить, если ключ не существует. Например, если у нас должен был быть ключ с именем `'hobbies'`, содержащий список различных увлечений, мы можем попросить Python вернуть пустой список вместо `None.`

Посмотрите, сможете ли вы написать код ниже, чтобы это произошло. Решение доступно по нажатию переключателя:

#### Добавление элементов в словари Python

Добавление элементов в словарь Python невероятно просто! Мы можем просто напрямую присвоить паре `key:value` словарь.

Давайте посмотрим, как это выглядит. Мы захотим добавить пункт о хобби в наш словарь.

```python
# Добавление элементов в словарь Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
info['hobbies'] = ['Coding', 'Long Walks on the Beach']  # Добавляем новый ключ 'hobbies' и его значение

print(info)
# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'hobbies': ['Coding', 'Long Walks on the Beach']}
```

Python также предоставляет несколько способов объединения двух словарей. Это может быть чрезвычайно полезно, если данные были собраны отдельно и вы не хотите вручную обновлять элементы одного словаря элементами из другого.

Для этого можно использовать метод `.update()`. Аналогично, в Python 3.8+ можно использовать оператор `|`. Оба метода работают одинаково: словарь справа будет объединен со словарем слева. Любые новые пары "ключ-значение" будут добавлены, а существующие ключи в левом словаре будут обновлены значениями из правого.

```python
# Объединение двух словарей в Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
more_info = {'company': 'datagy.io', 'location': 'Toronto, ON'}

info.update(more_info)  # Объединяем словари (существующие ключи перезаписываются значениями из more_info)

print(info)
# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto, ON', 'company': 'datagy.io'}
```

Мы видим, что новые элементы из словаря `more_info` были добавлены, а существующие элементы были обновлены. Имейте это в виду при обновлении информации!

#### Изменение существующих элементов словаря Python

Изменение существующих элементов работает так же, как добавление новых! Мы можем просто напрямую присвоить значение существующему ключу и обновить его значение. Дополнительное преимущество в том, что если элемент не существует, то добавляется новый.

Давайте рассмотрим добавление изменения нашего ключа `'location'` в нашем словаре:

```python
# Изменение элементов в словаре Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
info['location'] = 'Toronto, ON'  # Изменяем значение по ключу 'location'

print(info)

# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto, ON'}
```

Нет ничего сложного в этом! Давайте посмотрим, как удалять элементы из словаря в Python.

#### Удаление элементов из словарей в Python

Подобно спискам, Python предоставляет несколько способов удаления элементов из словарей. Первый подход, который мы рассмотрим, — использование ключевого слова `del`. Это ключевое слово принимает элемент словаря и удаляет его из словаря.

Давайте посмотрим, как мы можем использовать ключевое слово для удаления элемента:

```python
# Удаление элемента из словаря с помощью del
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
del info['age']  # Удаляем элемент с ключом 'age'

print(info)

# Возвращает: {'name': 'Nik', 'location': 'Toronto'}
```

Мы также можем использовать метод `.pop()` в Python, чтобы удалить элемент из словаря. Преимущество этого подхода в том, что он возвращает значение до удаления пары ключ-значение. Давайте посмотрим, как это выглядит:

```python
# Использование метода .pop() для удаления элемента из словаря
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
age = info.pop('age')  # Удаляем элемент с ключом 'age' и возвращаем его значение

print(age)  # Выводим удаленное значение 'age'
print(info)  # Выводим обновленный словарь без удаленного элемента

# Возвращает: 
# 33
# {'name': 'Nik', 'location': 'Toronto'}
```

Оба этих метода требуют внимательности, чтобы не удалять несуществующие ключи. Оба этих метода вернут `KeyError`, если мы попытаемся удалить несуществующий ключ. Давайте это подтвердим:

```python
# Попытка удалить ключ, которого не существует
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

# Пытаемся удалить ключ 'hobbies', которого нет в словаре
# В результате возникает исключение KeyError, так как ключ 'hobbies' отсутствует в словаре
age = info.pop('hobbies')

# Вызывает: KeyError: 'hobbies'
```

Метод `.pop()` позволяет нам задать значение по умолчанию, чтобы программа не завершалась с ошибкой, если ключ не существует. Это позволяет нам безопаснее запускать программу.

Давайте посмотрим, как это работает:

```python
# Безопасное использование метода .pop() с заданным значением по умолчанию
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

# Пытаемся удалить ключ 'hobbies', если он есть в словаре. Если ключа нет, возвращается значение по умолчанию - пустой список.
age = info.pop('hobbies', [])

print(age)

# Возвращает: []
```

Хотя, конечно, это не удаляет ключ, это позволяет нам безопаснее писать программы, которые требуют доступа к ключу и его удаления из словаря.

### Методы словаря Python

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

#### Доступ к элементам словаря с помощью .items()

Мы можем использовать метод `.items()`, чтобы легко получить все элементы в словаре. Применение этого метода возвращает объект, похожий на список, содержащий кортежи с ключом и значением каждого элемента словаря.

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

```python
# Получение элементов словаря с помощью метода .items()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

# Метод .items() возвращает представление словаря в виде списка кортежей (ключ, значение)
print(info.items())

# Возвращает: dict_items([('name', 'Nik'), ('age', 33), ('location', 'Toronto')])
```

Мы можем перебирать объект `dict_items`, чтобы получить доступ как к ключам, так и к значениям.&#x20;

#### Доступ к ключам словаря с помощью .keys()

Мы можем легко получить доступ ко всем ключам в словаре, используя метод `.keys()`. Он возвращает объект, похожий на список, который содержит все ключи.

Давайте возьмем наш предыдущий словарь и применим метод `.keys()`

```python
# Получение всех ключей словаря с помощью метода .keys()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

# Метод .keys() возвращает представление всех ключей словаря
print(info.keys())

# Возвращает: dict_keys(['name', 'age', 'location'])
```

#### Доступ к значениям словаря с помощью .values()

Подобно методу `.keys()`, мы можем получить доступ ко всем значениям в словаре Python с помощью метода `.items()`. Этот метод также возвращает объект, похожий на список, который содержит значения всех ключей в словаре.

Давайте применим метод `.items()` к нашему словарю:

```python
# Получение всех значений словаря с помощью метода .values()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

# Метод .values() возвращает представление всех значений словаря
print(info.values())

# Возвращает: dict_values(['Nik', 33, 'Toronto'])
```

#### Проверка членства в словарях Python

Для проверки наличия ключа в словаре Python удобно использовать ключевое слово `in`. Давайте посмотрим, как можно проверить, существует ли ключ в словаре, с помощью метода `.keys()`

```python
# Проверка наличия ключа в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

if 'name' in info.keys():  # Проверяем, существует ли ключ 'name' в словаре
    print('Exists!')  # Если ключ существует, выводим 'Exists!'
else:
    print("Doesn't exist!")  # Если ключ не существует, выводим "Doesn't exist!"

# Возвращает: Exists!
```

На самом деле мы можем упростить этот процесс, не используя метод `.keys()`. По умолчанию Python будет проверять членство в ключах словаря. Из-за этого мы можем даже опустить этот метод из нашей проверки членства:

```python
# Проверка наличия ключа в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

if 'name' in info:  # Проверяем, существует ли ключ 'name' в словаре
    print('Exists!')  # Если ключ существует, выводим 'Exists!'
else:
    print("Doesn't exist!")  # Если ключ не существует, выводим "Doesn't exist!"

# Возвращает: Exists!
```

В следующем разделе вы узнаете, как итерироваться по словарям в Python.

### Перебор словарей Python

Теперь, когда у вас есть хорошее понимание того, как получить доступ к элементам, ключам и значениям в словарях Python, давайте посмотрим, как можно итеративно обрабатывать словари Python.

Так как методы `.items()`, `.keys()`, и `.values()` возвращают объекты, похожие на списки, мы можем напрямую перебирать их. Давайте сначала посмотрим, как перебирать ключи:

```python
# Перебор всех ключей в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

for key in info.keys():  # Перебираем все ключи в словаре
    print(key)

# Возвращает: 
# name
# age
# location
```

Этот подход работает так же для `.items()`.

Но что, если вы хотите перебрать ключи *и* значения одновременно? Для этого можно использовать так называемую *распаковку*. Мы можем перебирать возвращаемое значение метода `.items()` и распаковывать ключ и значение из возвращаемого кортежа.

Давайте посмотрим, как это выглядит:

```python
# Перебор и ключей, и значений в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}

for key, value in info.items():  # Перебираем пары ключ-значение в словаре
    print('Key = ', key, ', Value = ', value)

# Возвращает: 
# Key =  name , Value =  Nik
# Key =  age , Value =  33
# Key =  location , Value =  Toronto
```

В заключительном разделе ниже вы узнаете, являются ли словари в Python упорядоченными или нет.

### Упорядочены ли словари Python?

Ответ на вопрос о том, упорядочены ли словари в Python, не является простым да или нет. До версии 3.6 словари в Python были неупорядоченными. Начиная с версии 3.6 (и официально с версии 3.7), словари в Python стали упорядоченными.

Теперь словари Python упорядочены на основе *порядка вставки*. Это обеспечивает более быстрый доступ.

### Упражнение

Ниже вы найдете несколько упражнений, чтобы проверить ваше понимание словарей в Python. Используйте предоставленное рабочее пространство кода, чтобы протестировать ваши решения. Вы можете переключать разделы, чтобы проверить решения.

Создайте словарь, подобный приведенному ниже, и выполните следующие упражнения:

```python
# Загрузка словаря в редактор кода ниже
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io'}
```

{% tabs %}
{% tab title="1 Упражнение" %}
**Выведите все значения словаря с использованием цикла for**

```python
for value in info.values():
    print(value)
```

{% endtab %}

{% tab title="Решение" %}

```python
# Создание словаря, аналогичного приведенному ниже
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io'}

# Вывод всех значений словаря с помощью цикла for
for value in info.values():  # Перебираем все значения в словаре
    print(value)  # Выводим каждое значение

# Вывод:
# Nik
# 33
# Toronto
# bemind.gitbook.io
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="2 Упражнение" %}
**Добавить новый ключ, содержащий список значений**

```python
info['Favourite Snacks'] = ['Popcorn', 'Cookies']
```

{% endtab %}

{% tab title="Решение" %}

```python
# Создание словаря, аналогичного приведенному ниже
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io'}

# Добавление нового ключа, содержащего список значений
info['Favourite Snacks'] = ['Popcorn', 'Cookies']

# Результат добавления нового ключа
# {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io', 'Favourite Snacks': ['Popcorn', 'Cookies']}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="3 Упражнение" %}
Обновите ключ местоположения на «Ванкувер».

```
info['location'] = 'Vancouver'
```

{% endtab %}

{% tab title="Решение" %}

```python
# Создание словаря, аналогичного приведенному ниже
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io'}

# Обновление значения ключа 'location' на 'Ванкувер'
info['location'] = 'Ванкувер'

# Результат обновления ключа 'location'
# {'name': 'Nik', 'age': 33, 'location': 'Ванкувер', 'company': 'bemind.gitbook.io'}
```

{% endtab %}
{% endtabs %}

### Заключение и резюме

Фух! Вы дошли до конца руководства! Было много информации о словарях Python, и вы узнали о них множество новых вещей!

Краткий обзор всего, что вы узнали о словарях Python

* К элементам можно обращаться с помощью методов `.items()`, `.keys()`, и `.values()`.
* Метод `.pop()` позволяет передавать значение по умолчанию, что позволяет программе работать безопасно, если ключ не существует.
* Мы можем удалять элементы с помощью `del` или `.pop()`.
* Мы можем добавлять элементы, просто присваивая значение ключу.
* Словари похожи на формат JSON, который часто используется для хранения данных в интернете.
* Вы можете создать словари с помощью функции `dict()` или фигурных скобок `{}`.
* Значения могут быть любого типа и могут дублироваться.
* Ключи должны быть неизменяемыми и уникальными.
* Словари — это ассоциативный массив значений, содержащий пары ключ

### Дополнительные ресурсы

Посмотрите учебные пособия ниже для получения дополнительных ресурсов:

* Python: сортировка словаря по значениям
* Слияние словарей Python – объединение словарей (7 способов)
* Python: Pretty Print a Dict (словарь) – 4 способа
* Python: получить ключ словаря с максимальным значением (4 способа)
* [Официальная документация по словарям Python](https://docs.python.org/3/tutorial/datastructures.html)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://bemind.gitbook.io/neural/python/python-dictionaries/polnyi-obzor-slovarei-v-python.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.
