# Понимание словаря Python (с примерами)

**Узнайте все о генераторах словарей в Python, включая создание словарей, использование условных операторов (if-else) и как вкладывать генераторы с помощью простых шагов и примеров!**

Оглавление

* [Что такое словари (dicts) в Python?](#chto-takoe-slovari-dicts-v-python)
  * [Как создать словарь Python?](#kak-sozdat-slovar-python)
  * [Как получить доступ к элементам из словаря Python?](#kak-poluchit-dostup-k-elementam-iz-slovarya-python)
* [Что такое словарь Python?](#chto-takoe-slovar-python)
* [Зачем использовать понимание Python Dict?](#zachem-ispolzovat-ponimanie-python-dict)
* [Как написать словарь на Python?](#kak-napisat-slovar-na-python)
  * [Пример понимания словаря: создание квадратов чисел](#primer-ponimaniya-slovarya-sozdanie-kvadratov-chisel)
  * [Пример понимания словаря: переход от килограммов к фунтам](#primer-ponimaniya-slovarya-perekhod-ot-kilogrammov-k-funtam)
* [Как добавить условия (операторы if-else) в словарь Python?](#kak-dobavit-usloviya-operatory-if-else-v-slovar-python)
  * [Добавление операторов IF в выражениях Python Dict](#dobavlenie-operatorov-if-v-vyrazheniya-python-dict)
  * [Добавление нескольких операторов IF](#dobavlenie-neskolkikh-operatorov-if)
  * [Понимание слов на Python с использованием конструкций If Else](#ponimanie-slovarei-v-python-s-ispolzovaniem-konstrukcii-if-else)
* [Понимание вложенного словаря в Python](#ponimanie-vlozhennogo-slovarya-v-python)
* [Как вы используете функцию перечисления с словарями Python?](#kak-vy-ispolzuete-funkciyu-perechisleniya-s-slovaryami-python)
  * [Пример словаря понимания: использование функции перечисления](#primer-ponimaniya-slovarya-ispolzovanie-funkcii-perechisleniya)
* [Примеры использования словаря Python](#primery-ispolzovaniya-slovarya-python)
  * [Удаление элементов словаря](#udalenie-elementov-slovarya)
  * [Обратный ключ:значение в словаре](#obratnyi-klyuch-znachenie-v-slovare)
* [Предупреждения при использовании словаря Python](#preduprezhdeniya-pri-ispolzovanii-slovarya-python)
* [Заключение](#zaklyuchenie)

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

<mark style="color:red;">**Словари (или**</mark><mark style="color:red;">**&#x20;**</mark>*<mark style="color:red;">**dicts**</mark>*<mark style="color:red;">**)**</mark> в Python - это неупорядоченные коллекции элементов. В отличие от других составных типов данных (таких как списки или кортежи), содержащих только значение в качестве элемента, словарь содержит пару ключ:значение в качестве своего элемента.

Словари позволяют вам легко извлекать значения, когда вы знаете ключ.

Если вы хотите узнать всё, что нужно знать о словарях в Python, ознакомьтесь с [подробным руководством по словарям на сайте Real Python](https://realpython.com/python-dicts/)

#### Как создать словарь Python?

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

Давайте создадим словарь для книги "Гарри Поттер и Философский камень":

```python
hp = {
    'title': "Harry Potter and the Philosopher's Stone",
    'author': "J.K. Rowling",
    'publication': '1988-06-26'
}
```

#### Как получить доступ к элементам из словаря Python?

В отличие от других типов контейнеров, которые используют индексацию, словари используют ключи. Ключи можно использовать либо внутри квадратных скобок, либо с помощью метода `get()`.

Метод `get()` возвращает значение None вместо KeyError, когда ключ не найден.

```python
print(hp['title'])
#Output: Harry Potter and the Philosopher's Stone

print(hp.get('publication'))
#Output: 1988-06-26
```

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

Словарные включения в Python - это краткие способы создания словарей без использования циклов for.

Если вы хотите узнать больше о циклах For в Python, ознакомьтесь с нашим [полным руководством](https://datagy.io/python-for-loop/)

Они похожи на списковые включения в Python. Однако вместо создания списков они создают словари.

### Зачем использовать понимание Python Dict?

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

<mark style="color:green;">**Каждое понимание словаря может быть записано в виде цикла for (но не каждый цикл for может быть записан как понимание словаря).**</mark>

Циклы for, однако, могут быть длинными и сложными для понимания.

Поскольку они обычно значительно короче циклов for, использование списковых включений делает код более питоническим.

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

### Как написать словарь на Python?

Аналогично генераторам списков в Python, генераторы словарей следуют приведенному ниже шаблону:

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FIxcvsyPGka3rSyKzwzju%2FPython-Dictionary-Comprehension-Syntax.png?alt=media&#x26;token=fa3dcf8e-0834-4d4b-891d-9c6445219cdf" alt=""><figcaption></figcaption></figure>

Давайте рассмотрим это немного подробнее:

* key:value относится к паре ключ-значение, которую вы хотите создать
* Ключ и значение могут совпадать и относиться к одному и тому же значению.
* `vars` относится к переменной в итерируемом объекте
* iterable относится к любому объекту Python, по которому можно выполнить итерацию (например, список, кортеж или строка)

**Давайте попробуем простой пример:**

#### Пример понимания словаря: создание квадратов чисел

Представьте, что вам поручено создать словарь чисел от 1 до 5, где:

* Ключом является оригинальный номер, и
* Значение представляет собой исходное число, возведенное в квадрат.

Мы могли бы написать следующий код:

```python
squares = {i:i**2 for i in [1,2,3,4,5]}
print(squares)
```

Это возвращает следующий словарь:

```python
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
```

#### Пример понимания словаря: переход от килограммов к фунтам

Представьте, что у нас есть словарь, который содержит вес предметов в килограммах, и мы хотели бы конвертировать эти веса в фунты:

```python
old_weights = {
    'book': 0.5,
    'milk': 2.0,
    'tv': 7.0
}
new_weights = {key: value*2.2 for (key, value) in old_weights.items()}
print(new_weights)
```

Это возвращает следующий результат:

```python
{'book': 1.1, 'milk': 4.4, 'tv': 15.4}
```

### Как добавить условия (операторы if-else) в словарь Python?

В большинстве кодов условия используются как решения проблем. Понимание словарей в Python становится ещё более мощным, когда мы добавляем к ним условия, такие как операторы if и if

#### Добавление операторов IF в выражения Python Dict

Если у нас есть словарь, который включает в себя пары ключ-значение, например, людей и их возраст, мы можем отфильтровать словарь, чтобы оставить только людей старше 25 лет:

```python
ages = {
    'kevin': 12,
    'marcus': 9,
    'evan': 31,
    'nik': 31
}
new_ages = {key:value for (key, value) in ages.items() if value > 25}
print(new_ages)
```

Это возвращает:

```python
{'evan': 31, 'nik': 31}
```

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

```python
dict = {k:v for var in iterable if condition}
```

Утверждение IF следует за элемент итерации.

#### Добавление нескольких операторов IF

Если мы хотим добавить несколько условных операторов if (похоже на вложенный условный оператор if в цикле for), мы просто объединяем их вместе.

Например, если мы хотим отфильтровать наш список возрастов, чтобы включить только людей младше 25 лет и тех, кто имеет четный возраст (где возраст по модулю 2 возвращает 0), мы могли бы написать:

```python
ages = {
    'kevin': 12,
    'marcus': 9,
    'evan': 31,
    'nik': 31
}
younger = {key:value for (key, value) in ages.items() if value < 25 if value % 2 == 0}
print(younger)
```

Это возвращает следующее:

```python
{'kevin': 12}
```

Чтобы добавить больше условных операторов `if`, их следует записывать последовательно.

Совет: Цепочка из условий if эквивалентна созданию условия AND.

#### Понимание словарей в Python с использованием конструкций If Else

Использование конструкций IF-ELSE может сделать генераторы словарей еще более мощными. Используя наш предыдущий пример, если мы хотели бы пометить возраст как четный или нечетный, мы могли бы написать следующее:

```python
ages = {
    'kevin': 12,
    'marcus': 9,
    'evan': 31,
    'nik': 31
}
oddeven = {key:('odd' if value % 2 == 1 else 'even') for (key, value) in ages.items()}
print(oddeven)
```

Это возвращает следующее:

```python
{'kevin': 'even', 'marcus': 'odd', 'evan': 'odd', 'nik': 'odd'}
```

Структура здесь немного отличается. Оператор IF-ELSE применяется непосредственно к значению и помещается в скобки. Он используется для преобразования значения, а не для удаления пары ключ-значение, в данном случае.

### Понимание вложенного словаря в Python

Значение в паре Ключ:Значение также может быть другим словарным включением.

Допустим, нам нужен словарь, содержащий ключи со значениями от 1 до 5, и каждое значение представляет собой другой словарь, содержащий ключ, умноженный на интервалы 10 от 10 до 50.

Это можно сделать, написав следующее:

```python
mutiples = {
    key1: {
        key2: key1 * key2 
        for key2 in range(1, 6)
        } 
    for key1 in range(10, 60, 10)
}
print(mutiples)
```

Это возвращает следующее:

```python
{
    10: {1: 10, 2: 20, 3: 30, 4: 40, 5: 50}, 
    20: {1: 20, 2: 40, 3: 60, 4: 80, 5: 100}, 
    30: {1: 30, 2: 60, 3: 90, 4: 120, 5: 150}, 
    40: {1: 40, 2: 80, 3: 120, 4: 160, 5: 200}, 
    50: {1: 50, 2: 100, 3: 150, 4: 200, 5: 250}
}
```

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

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

### Как вы используете функцию перечисления с словарями Python?

Функция `enumerate` в Python полезна для определения индекса элемента в списке, кортеже или строке.

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

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

#### Пример понимания словаря: использование функции перечисления

```python
names = ['Harry', 'Hermione', 'Ron', 'Neville', 'Luna']
index = {k:v for (k, v) in enumerate(names)}
print(index)
```

Это возвращает следующее:

```python
{'Harry': 0, 'Hermione': 1, 'Ron': 2, 'Neville': 3, 'Luna': 4}
```

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

Если мы хотели бы поменять местами ключ и значение так, чтобы сначала шёл номер индекса, мы могли бы написать:

```python
names = ['Harry', 'Hermione', 'Ron', 'Neville', 'Luna']
index = {k:v for (v, k) in enumerate(names)}
print(index)
```

Что возвращает следующее:

```python
{0: 'Harry', 1: 'Hermione', 2: 'Ron', 3: 'Neville', 4: 'Luna'}
```

### Примеры использования словаря Python

#### Извлечение подмножества словаря

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

Давайте рассмотрим пример. В приведенном ниже коде мы хотим извлечь a, b, c из большего словаря.

```python
bigdict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
smalldict = {k: bigdict[k] for k in ('a', 'b', 'c')}
print(smalldict)
```

Это возвращает следующее:

```python
{'a': 1, 'b': 2, 'c': 3}
```

#### Удаление элементов словаря

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

```python
ages = {
    'kevin': 12,
    'marcus': 9,
    'evan': 31,
    'nik': 31
}
ages = {key:ages[key] for key in ages.keys() - {'marcus', 'nik'}}
print(ages)
```

Это возвращает следующее:

```python
{'evan': 31, 'kevin': 12}
```

#### Обратный ключ:значение в словаре

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

```python
dictionary = {'key1': 'value1', 'key2':'value2'}
dictionary = {value:key for (key,value) in dictionary.items()}
```

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

```python
user = {
    'name': 'nik',
    'age': 31,
    'company': 'datagy'
}

user_reversed = {v: k for (k, v) in user.items()}
print(user_reversed)
```

Это возвращает следующее:

```python
{'nik': 'name', 31: 'age', 'datagy': 'company'}
```

### Предупреждения при использовании словаря Python

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

Помните, что читабельность в будущем важна!

### Заключение

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

Если у вас есть вопросы, не стесняйтесь задавать их в комментариях ниже или связаться с нами через социальные сети!


---

# Agent Instructions: 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/ponimanie-slovarya-python-s-primerami.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.
