> 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/ponimanie-slovarya-python-s-primerami.md).

# Понимание словаря 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="/files/PUTb3n3wGNaYdxKIpSPj" 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! В этом посте вы узнали что такое словари, как писать выражения для создания словарей, добавление условий, вложенные выражения и рассмотрели несколько примеров.

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