# Массивы и словари

**Массив** — это структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу. Задается через \[]. Запись вида q = \[] означает, что в переменной q лежит массив без элементов. Если же q = \[2,5,7,4,9] - то в нашем массиве лежит 5 элементов - это длина массива. Индексы элементов, их адрес в массиве, начинаются с 0. Таким образом индекс элемента “2” будет 0, а индекс элемента “4” в нашем массиве - 3.

![](https://lh4.googleusercontent.com/jEmsRQdj8jFAFEy21YXZrr5VT2et5qUU7OEUXBHOdlzpeWC9wsYdUyxK9u5Wu6__atM8mgBtOfGNHXFI4l855V8adA0ZAkJx0d6ynZ66rozVZDzH2ogNbWsZF7OFd40K0HmMhL4G)

**Пример:** массив=\[1,2,3,4] или массив1=\["мать","отец","сын","дочь"]

**Пример обращения к элементу массива**: массив\[1] (вернет значение 2)

**Словарь** — это структура данных, представляющая собой специальным образом организованный набор элементов, которые хранят в себе данные. Все данные хранятся в виде пар ключ-значение. Доступ к элементам данных осуществляется по ключу. Ключ всегда должен быть уникальным в пределах одного словаря, данные могут дублироваться при необходимости.

**Пример:** {"Артикул":12345,"Наименование":"Футболка муж., белая","Размер":50,"Цена":1000}

**Пример обращения к элементу словаря:** словарь\["Артикул"] (вернет значение 12345)

Массивы и словари могут иметь сложную структуру, т.е. содержать друг друга, например:

массив словарей: товары=\[{"Артикул":12345,"Наименование":"Футболка муж., белая","Размер":50,"Цена":1000},{"Артикул":12346,"Наименование":"Футболка муж., черная","Размер":52,"Цена":1000}]

&#x20;Запись вида `s = {}` означает, что в переменной s лежит словарь, не содержащий элементов. Мы можем положить туда пару ключ-значение, или даже несколько: `s = {"ключ1":"значение1", "ключ2":"значение2","ключ3":"значение3"}` Каждый ключ и значение заключаются в кавычки, между ключом и значением ставится двоеточие, а пары ключ-значение разделяются запятой.

Массивы и словари могут быть вложенными. Рассмотрим пример:&#x20;

`радуга = [красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый]` - это массив.&#x20;

Если мы запишем&#x20;

радуга = {"каждый":"красный","охотник":"оранжевый","желает":" желтый","знать":"зеленый","где":"голубой","сидит":"синий","фазан":"фиолетовый"}

\- то у нас получится словарь.&#x20;

Если же мы внимательно присмотримся к радуге, то заметим, например, что голубой цвет у нас не однородный, а состоит из бирюзового, светло-голубого и темно-голубого цвета. Запишем: `голубой = [бирюзовый,светло-голубой, темно-голубой]`. А теперь вложим наш массив “голубой” в словарь “радуга”:&#x20;

радуга = {"<mark style="background-color:blue;">каждый</mark>":"<mark style="background-color:yellow;">красный</mark>","<mark style="background-color:blue;">охотник</mark>":"<mark style="background-color:yellow;">оранжевый</mark>","<mark style="background-color:blue;">желает</mark>":"<mark style="background-color:yellow;">желтый</mark>","<mark style="background-color:blue;">знать</mark>":"<mark style="background-color:yellow;">зеленый</mark>","<mark style="background-color:blue;">где</mark>":\[<mark style="background-color:yellow;">"бирюзовый","светло-голубой", "темно-голубой"</mark>],"<mark style="background-color:blue;">сидит</mark>":"<mark style="background-color:yellow;">синий</mark>","<mark style="background-color:blue;">фазан</mark>":"<mark style="background-color:yellow;">фиолетовый</mark>"}

Как же нам указать в таком случае адрес элемента, допустим “бирюзовый”?&#x20;

В словарях адресация идет по <mark style="background-color:blue;">**ключу**</mark>. Значит, адресом массива `[бирюзовый,светло-голубой, темно-голубой]` будет являться ключ “<mark style="background-color:blue;">где</mark>”.&#x20;

А в массивах адресом является <mark style="background-color:yellow;">**индекс**</mark>, значит у элемента “бирюзовый” адресом будет 0.

&#x20;Собираем все вместе: **\["где"]\[0]** - вот адрес элемента “бирюзовый”

<figure><img src="/files/3mjPW8Sl97PQer2X7ArQ" alt=""><figcaption><p>Пример получения значения вложенного в словарь массива</p></figcaption></figure>

<figure><img src="/files/mqd7vFxz0pUB8q9YGWxp" alt=""><figcaption></figcaption></figure>

## Как работать с  адресацией (JSON)

При получении ответов от сторонних сервисов через API - чаще всего мы получаем JSON, представляющий из себя словарь. Зачастую встает задача сохранить в переменную какое-то значение из этого словаря.&#x20;

Лучше всего можно понять принцип адресации при работе с JSON на примере. <mark style="background-color:green;">{</mark><mark style="background-color:orange;">"suggestions"</mark>: <mark style="background-color:red;">\[{"value": "Белорусский рубль", "unrestricted\_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]</mark><mark style="background-color:green;">}</mark>&#x20;

Здесь мы имеем словарь, содержащий одну пару ключ-значение **suggestions** - ключ для массива `[{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]`

В значении по ключу **suggestions** лежит массив, имеющий только один элемент - это словарь: `{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}` **suggestions|0** - ключ для первого (и единственного) элемента массива `{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}`

**suggestions|0|value** - ключ для значения "Белорусский рубль"

{"suggestions": \[{"<mark style="background-color:orange;">value</mark>": "<mark style="background-color:red;">Белорусский рубль</mark>", "unrestricted\_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]}

Самый длинный ключ в этом JSON: **suggestions|0|data|strcode** - ключ для значения BYN

<figure><img src="/files/AJ5lIURFG7sqct15x0aq" alt=""><figcaption></figcaption></figure>

{"suggestions": \[{"value": "Белорусский рубль", "unrestricted\_value": "Белорусский рубль", "data": {"code": "933", "<mark style="background-color:orange;">strcode</mark>": "<mark style="background-color:red;">BYN</mark>", "name": "Белорусский рубль", "country": "Беларусь"}}]}

Ключи разделяются вертикальной чертой. Если в JSON есть массив, то доступ к его элементу идет по номеру, начиная с 0 и также записывается через вертикальную черту. Нумерация в массиве идет с 0

В адресации числа приравниваются к строкам и наоборот. То есть равнозначно '6' и 6.

Помимо ответов по API, массивы и словари могут использоваться для удобного хранения данных.

К примеру, вам необходимо ограничить круг лиц, имеющих доступ к определенному разделу бота. Вы можете сохранить список их ID в массив, положив его в общую переменную проекта и в условиях блоков или стрелок проверяете вхождение id пользователя в этот массив.

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

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


---

# 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://docs.salebot.pro/chatbots/peremennye-i-funkcii/kalkulyator/massivy-i-slovari.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.
