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

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

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

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

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

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

**Пример:** {"SLU":12345,"Name":"Мужская футболка, белая","Size":50,"Price":1000}

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

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

массив словарей: products=\[{"SKU":12345,"Name":"Мужская футболка, белая","Size":50,"Price":1000},{"SKU":12346,"Name":"Мужская футболка, белая","Size":52,"Price":1000}]

&#x20;Выражение `s = {}` означает, что переменная s содержит словарь, не содержащий элементов. В него можно поместить пару ключ-значение или даже несколько: `s = {"key1":"value1", "key2":"value2","key3":"value3"}` Каждый ключ и значение заключаются в кавычки, между ключом и значением ставится двоеточие, а пары ключ-значение разделяются запятыми.

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

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

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

радуга = {"every":"красный","hunter":"оранжевый","wants":"жёлтый","know":"зелёный","where":"светло-синий","sits":"синий","pheasant":"фиолетовый"}

— мы получим словарь

Если внимательно посмотреть на радугу, можно увидеть, например, что светло-синий цвет более сложный и состоит из бирюзового, светло-синего и тёмно-синего. Запишем: `светло-синий = [бирюзовый, светло-синий, тёмно-синий]`. Теперь вложим наш массив “blue” в словарь “rainbow”:

rainbow = {"first\_color":"<mark style="background-color:yellow;">красный</mark>","<mark style="background-color:blue;">second\_color</mark>":"<mark style="background-color:yellow;">оранжевый</mark>","<mark style="background-color:blue;">third\_color</mark>":"<mark style="background-color:yellow;">жёлтый</mark>","<mark style="background-color:blue;">forth\_color</mark>":"<mark style="background-color:yellow;">зелёный</mark>","<mark style="background-color:blue;">sixth\_color</mark>":"<mark style="background-color:yellow;">синий</mark>","<mark style="background-color:blue;">last\_color</mark>":"<mark style="background-color:yellow;">фиолетовый</mark>"}

Итак, как указать адрес элемента, например “turquoise”?&#x20;

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

&#x20;Подведём итог: **\["where"]\[0]** — это адрес элемента "turquoise".

<div data-with-frame="true"><figure><img src="/files/7edad5c4acf37bada7ba0e4dc7719d049ca5f023" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/9c1f374ad578f132d051d7457fe4cbee536d3643" alt="" width="375"><figcaption></figcaption></figure></div>

## Как работать с обращением (JSON)

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

Лучше всего понять принцип обращения в JSON можно на примере:<mark style="background-color:green;">{</mark><mark style="background-color:orange;">"suggestions"</mark>: <mark style="background-color:red;">\[{"value": "Dirham", "unrestricted\_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}]</mark><mark style="background-color:green;">}</mark>&#x20;

Здесь у нас словарь, содержащий одну пару ключ-значение **suggestions** — ключ для массива: `[{"value": "Dirham", "unrestricted_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}]`

Значением **suggestions** ключа является массив всего с одним элементом — словарём:  `{"value": "Dirham", "unrestricted_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}` **suggestions|0** — это ключ первого (и единственного) элемента массива.`{"value": "Dirham", "unrestricted_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}`

**suggestions|0|value** — это ключ к значению "Белорусский рубль"

{"suggestions": \[{"<mark style="background-color:orange;">value</mark>": "Dirham", "unrestricted\_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}]}

Самый длинный путь ключа в этом JSON: **suggestions|0|data|strcode** — это ключ для AED

<div data-with-frame="true"><figure><img src="/files/90b6ba3fa904dd502bc4bb29ea5fa24b901f3f43" alt="" width="563"><figcaption></figcaption></figure></div>

{"suggestions": \[{"value": "Dirham", "unrestricted\_value": "Dirham", "data": {"code": "784", "<mark style="background-color:orange;">strcode</mark>": "<mark style="background-color:red;">AED</mark>", "name": "Dirham", "country": "ОАЭ"}}]}

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

В обращении числа трактуются так же, как строки, и наоборот. Например, '6' и 6 считаются равными.

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

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

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

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

## Работа с массивами

### Как создать массив

Создание массива — объявление массива

**array\_name = \[]**

### Как очистить массив

Очистка массива по сути ничем не отличается от объявления пустого массива:

**array\_name = \[]**

### Как обратиться к элементу массива

<details>

<summary>Описание</summary>

**name\[index] -** обращение к элементу массива по индексу или по значению

</details>

<details>

<summary>Пример</summary>

Рассмотрим несколько примеров работы с массивами:

**Пример обращения к элементу массива по его индексу:**

<div data-with-frame="true"><figure><img src="/files/60b0deac339813a10a517293dde936ec791cd71f" alt="" width="563"><figcaption></figcaption></figure></div>

#### Пример получения последнего элемента массива:

<div data-with-frame="true"><figure><img src="/files/457dc389f605ca0957edf0a70426d3f5674b5b78" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
/*Обращение по индексу*/
arrayI = [1, "2", 3, 4, 5]
k=arrayI[3]
/*Обращение по индексу из вложенного массива*/
arrayV = [[1, "2", 4, 5], "2", 3, 4, 5]
v=arrayV[0][1]

/*Пример получения последнего элемента*/
array = [1, "2", 3, 4, 5]
/*Получение последнего элемента массива*/
last = array[-1]
```

</details>

### Как заменить значение в массиве

<details>

<summary>Описание</summary>

**name\[index] =** **value** — замена элемента массива по заданному индексу

</details>

<details>

<summary>Пример</summary>

**Пример:**

Чтобы заменить значение определённого элемента массива, используйте следующий синтаксис: *array\_name\[index] = value*

<div data-with-frame="true"><figure><img src="/files/b82c3fe02a4b1c1ec3ef1278fb39be3ae0405bdb" alt="" width="563"><figcaption></figcaption></figure></div>

Ответ:

<div data-with-frame="true"><figure><img src="/files/9b346a8f9a990b244bd11eba0071060672c1a2bf" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
array = [1, "2", 3, 4, 5]

/*Замена в массиве\словаре*/
array[2] = 888

/*Добавление в словарь   dicts['key'] = 'VVVVVVVVVVV'*/
dicts['m']=new

/*Замена в массиве\словаре на число*/
array[3] = int('888')
dicts['a'] = int('555')
```

</details>

### Как проверить, содержится ли элемент в массиве

<details>

<summary>Описание</summary>

**in\_array(mass, value)** — чтобы проверить, существует ли элемент в массиве.

**Параметры:** \ <mark style="color:красный;">!</mark> **mass -** массив \ <mark style="color:красный;">!</mark> **value -** значение для поиска

Возвращает True или False в зависимости от того, найдено значение или нет.

</details>

<details>

<summary>Пример</summary>

Пример:

<div data-with-frame="true"><figure><img src="/files/2282b2bd3d1aacdfaa7a0e9b98a868c8920bb681" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = ["Mike", "Peter", "Helen"] 
q = if(in_array(s, 'Ann'), 'Найдено', 'Другая строка')
```

</details>

### Как узнать длину массива

<details>

<summary>Описание</summary>

**arr\_len(mass)** — чтобы узнать длину массива

Параметр:\ <mark style="color:красный;">!</mark> **mass -**  *массив*&#x20;

Результат: возвращает число — длину массива.

{% hint style="warning" %}
Будьте внимательны при передаче параметров функции! Если вызвать без параметров, она вернёт 0; если параметр не является ни массивом, ни словарём, вернёт -1.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример использования:

<div data-with-frame="true"><figure><img src="/files/60e8a13dce209c01f834de47726221bd6343a4b1" alt=""><figcaption></figcaption></figure></div>

Результат:

<div data-with-frame="true"><figure><img src="/files/16d4bf1cf949482ae7f7a872ab30fa436ca59185" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = ["Mike", "Peter", "Helen"] 
q = if(arr_len(s) > 5, 'Группа заполнена', 'Присоединяйтесь к нашей команде!')
```

</details>

### Как вставить элемент в конец массива?

<details>

<summary>Описание</summary>

**append(mass, element, priznak)** — чтобы вставить элемент в конец массива.&#x20;

Параметры:

<mark style="color:красный;">!</mark> **mass -** массив\ <mark style="color:красный;">!</mark> **element -** элемент для вставки\
**priznak** — флаг, указывающий, является ли это массивом или словарём

Возвращает массив с добавленным в конец значением. Чтобы обновить исходный массив, используйте присваивание: **mass = append(mass, element, priznak)**&#x20;

{% hint style="warning" %}
&#x20;По умолчанию данные вставляются как строки. **Если нужно вставить массив или словарь, передайте дополнительный параметр True**. Это означает, что вы вставляете JSON.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример использования:

<div data-with-frame="true"><figure><img src="/files/62c63a28867d0949a4f4e96ca986b1cf9389bc0a" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/eb4fb06b5ea9363805a2cdad6b2984ae54c5d646" alt="" width="375"><figcaption></figcaption></figure></div>

Пример добавления и удаления из массива:

<div data-with-frame="true"><figure><img src="/files/ae8d1a05b24e709f04585312ca193954896ff736" alt="" width="563"><figcaption><p>В этом примере элемент добавляется в массив project.vibpzdr, а значение <code>p</code> удаляется из массива project.pzdr</p></figcaption></figure></div>

Пример создания массива с вложенными массивами:

<div data-with-frame="true"><figure><img src="/files/803f299d379ec833fb881a29901f5d822670e8df" alt="" width="563"><figcaption></figcaption></figure></div>

Результат выполнения функции:

<div data-with-frame="true"><figure><img src="/files/668665e81d166d74c3f6e9b89a9ab38a43fe109a" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = ["Mike", "Peter", "Helen"]
q = append(s, 'Max')
```

</details>

### Как вставить значение в определённую позицию массива

<details>

<summary>Описание</summary>

**insert(mass, index, value, priznak)** — чтобы вставить элемент в определённую позицию массива.

Параметры: \ <mark style="color:красный;">!</mark> **mass -** массив\ <mark style="color:красный;">!</mark> **index -** позиция вставки\ <mark style="color:красный;">!</mark> **value -** value\
**indicator** — индикатор добавления в массив или словарь.

Результат:\
Возвращает массив со значением, добавленным в указанную позицию. Иными словами, чтобы добавить значение в тот же массив, используйте команду в следующем виде:  **mass = insert(mass, index, value, indicator)**&#x20;

{% hint style="warning" %}
По умолчанию данные вставляются как строки. **Если нужно вставить массив или словарь, передайте дополнительный параметр True**. Это означает, что вы вставляете JSON..
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример:

<div data-with-frame="true"><figure><img src="/files/782ce71905ec50c1ca219f43f2607bad47096c61" alt="" width="563"><figcaption></figcaption></figure></div>

Результат:

Рассмотрим более сложный пример — добавление словаря t в массив s:

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

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

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

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = ["Mike", "Peter", "Helen"]
q = insert(s, 1, 'Max')
```

</details>

### Как удалить элемент из массива

del() | del | remove()

<details>

<summary>Описание</summary>

<mark style="background-color:blue;">**По индексу**</mark>

**del(mass, key)** — удаляет элемент из массива по его индексу.&#x20;

Параметры: \ <mark style="color:красный;">!</mark> **mass -** имя массива;\ <mark style="color:красный;">!</mark> **key -** индекс удаляемого значения

Возвращает новый массив с удалённым элементом; исходный массив остаётся без изменений. Чтобы удалить и обновить тот же массив, используйте команду в таком виде: \
**mass = del(mass, key)**

{% hint style="warning" %}
Если ваш массив содержит числа и вы хотите удалить элемент по значению, используйте функцию remove().&#x20;
{% endhint %}

**del name\['index']** — удаление значения из массива по индексу

Параметры: \ <mark style="color:красный;">!</mark> **name-** имя массива;\ <mark style="color:красный;">!</mark> **index-** индекс удаляемого значения

<mark style="background-color:blue;">По значению</mark>

**remove(mass, value)** — чтобы удалить значение из *массив*.&#x20;

Параметры: \ <mark style="color:красный;">!</mark> **mass -** имя массива; \ <mark style="color:красный;">!</mark> **value -** значение для удаления из массива

Результат:\
Возвращает изменённый массив, оставляя исходный массив без изменений. Чтобы удалить элемент и обновить тот же массив, используйте команду в следующем виде:\
**mass = remove(mass, key)**

</details>

<details>

<summary>Примеры</summary>

Пример удаления элемента по индексу:

<div data-with-frame="true"><figure><img src="/files/bf72eb8b218b4535c408c7652663a0f0f9801b78" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/ee0790c5f1f2a5065ec486e4f239d54e47d4fce7" alt="" width="375"><figcaption></figcaption></figure></div>

Пример удаления элемента массива по значению:

<div data-with-frame="true"><figure><img src="/files/26904a6c0c225fe5d743eff849f4adab043c5784" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/ebcb76c5478eaa6befe9e81e81d71dc81aa86e80" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
/*Удаление элемента массива по его индексу:*/
array = ["1",2, 3, "4"]
del array['1']

array1 = ["1",2, 3, "4"]
array1=del(array1,0)


/*Удаление элемента массива по его значению:*/
array = ["1",2, 3, "4"]
array=remove(array, '4') 

array1 = ["1",2, 3, "4"]
array1=remove(array1, 2) 
```

</details>

### Как получить позицию элемента в массиве

<details>

<summary>Описание</summary>

**index(mass, value)**

Параметры: \ <mark style="color:красный;">**!**</mark> **mass -** имя массива \ <mark style="color:красный;">**!**</mark>**&#x20;value -** значение, позицию которого нужно определить.

Если элемента нет в массиве, функция вернёт -1.

</details>

<details>

<summary>Примеры</summary>

Пример определения позиции элемента в массиве:

<div data-with-frame="true"><figure><img src="/files/7845be9c4ad6b8af43ec26d98ab18a6956acd94d" alt="" width="563"><figcaption></figcaption></figure></div>

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

<div data-with-frame="true"><figure><img src="/files/afd90f90d525e6f4100c1c32ce305bdcca2fb16d" alt="" width="375"><figcaption></figcaption></figure></div>

Как видим, поскольку числа 5 нет в массиве, функция вернула -1.

</details>

<details>

<summary>Пример кода для копирования</summary>

```
array = ["1",2, 3, "4"]
search1=index(array,"1")
search2=index(array,5)
```

</details>

### Как преобразовать массив в человекочитаемый текст

<details>

<summary>Описание</summary>

**massive\_to\_text(massive, header, numbered,delimiter1,delimiter2)**

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;massive** — массив, который нужно отобразить,\
**header** — заголовок, который будет отображён в начале вывода\
**numbered** — если передано какое-либо значение, элементы массива будут пронумерованы\
**delimiter1** — символ, ставящийся в конце строки каждого элемента (по умолчанию ‘;’),\
**delimiter2** — символ, используемый после номера элемента при включённой нумерации (по умолчанию ‘)’ )

</details>

<details>

<summary>Примеры</summary>

Простой пример:

В результате массив будет отображён как нумерованный список:

<div data-with-frame="true"><figure><img src="/files/b6d47c919654028a862252241aae527d7a3082c2" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
Array1 = [1, 2, 3, "a", "b", "c"] 
text = array_to_text(Array1, 'title', 1) 
```

</details>

### Как исключить один массив из другого

<details>

<summary>Описание</summary>

**except\_arr(mas1, mas2)**&#x20;

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;mas1** — массив, из которого будут исключаться элементы,\ <mark style="color:красный;">**!**</mark>**&#x20;mas2** — массив, содержащий элементы, которые нужно исключить

</details>

<details>

<summary>Примеры</summary>

Рассмотрим пример:

<div data-with-frame="true"><figure><img src="/files/a76dea8ead58d3c20762ad8ad01a6ed3a392a7bf" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/c69fa13dc3fb3fe18d2907d51fe6d587cdf90366" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s1 = [1, 2, 3]
s2 = [2, 3]
s3 = except_arr(s1, s2)
```

</details>

### Как найти пересечение массивов

<details>

<summary>Описание</summary>

**cross\_arr(mas1, mas2)**

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;mas1** — массив для поиска в нём\ <mark style="color:красный;">**!**</mark>**&#x20;mas2** — массив, содержащий элементы для поиска

</details>

<details>

<summary>Примеры</summary>

<div data-with-frame="true"><figure><img src="/files/a6722249a0b51b27b6a58efbfb25f85afe955586" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/3193b352f506dc0a1c34d2fb1410201e110766da" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s1 = [1, 2, 3]
s2 = [2, 3]
s3 = cross_arr(s1, s2)

mas1 = ["не", "исключая,", "то,", "что", "всё", "так", "просто.", "спасибо"]
mas2 = ["всё", "спасибо"]
mas3 = cross_arr(mas1, mas2)
```

</details>

### **Как объединить массивы**

<details>

<summary>Описание</summary>

Специальной встроенной функции для объединения массивов нет, но это легко можно сделать:

Чтобы объединить массивы, выполните конкатенацию строк, а затем замените ']\[' на запятую ','

</details>

<details>

<summary>Примеры</summary>

Это пример в поле Calculator

<div data-with-frame="true"><figure><img src="/files/04721496b6539920ff2d2bcb8008a4f2f92b9615" alt="" width="563"><figcaption></figcaption></figure></div>

Это пример работы бота

<div data-with-frame="true"><figure><img src="/files/ec3f487cc5dedcbfd5e4343d70e50de8bd92a375" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
a = [1,2,3,4] 
b = [5,6,7] 
sum = a + b 
answer = replace(sum, '][', ',') 
```

</details>

### Как суммировать элементы массива

<details>

<summary>Описание</summary>

**sum\_array(array)**

**Параметры:**

**массив** — массив, элементы которого нужно суммировать

{% hint style="warning" %} <mark style="color:красный;">**Внимание!**</mark>**&#x20;Функция работает с массивами определённого формата.**

Допустимые форматы: - \[1,2,3,4] или ‘\[1,2,3,4]’. \
Если массив содержит числа, представленные как строки, их нужно заключать в двойные кавычки — например, \[1,2,3,”-4”].  \
Если массив содержит буквенные строки, вычисление завершится ошибкой.

Пример неправильного использования:\
mas = \[1,2,3,"a"] \
result = sum\_array(mas)

Это приведёт к ошибке: **массив содержит неподдерживаемые элементы**
{% endhint %}

</details>

<details>

<summary>Примеры</summary>

<div data-with-frame="true"><figure><img src="/files/5e1b0328dbb21997bc3cc0153e019e5575608776" alt="" width="563"><figcaption></figcaption></figure></div>

Результат:

<div data-with-frame="true"><figure><img src="/files/9f52680a9bb70100ab6267ba404b50b2ad29fd80" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/b01c561a19db0eb2044c2234847776cfe7ab3632" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
mas = [1,2,3,4] 
result = sum_array(mas) 
```

</details>

### Как перемешать элементы массива

<details>

<summary>Описание</summary>

**shuffle\_massive(massive**

Параметры:

**massive** — массив, элементы которого нужно перемешать.

</details>

<details>

<summary>Примеры</summary>

<div data-with-frame="true"><figure><img src="/files/2e618fd2a8cd5be72e8ba4e741c224976bf1167f" alt="" width="563"><figcaption></figcaption></figure></div>

Результаты выполнения функции:

<div data-with-frame="true"><figure><img src="/files/860eb67d405513cf7575a9abad2ac93178e9148e" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
Massive1 = [1, 2, 3, "a", "b", "c"]
Massive2 = shuffle_massive(Massive1) 
```

</details>

### Для сортировки массивов и словарей&#x20;

sort() | sort\_by\_value()

<details>

<summary>Описание</summary>

<mark style="background-color:blue;">**Сортировка в массиве или словаре**</mark>&#x20;

**sort(mass, b)** — сортирует массив по значению, а словарь по ключу

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;mass** — массив/словарь\
**b** — порядок сортировки (False — по возрастанию (по умолчанию), True — по убыванию)

<mark style="background-color:blue;">**Сортировка словаря по его значению**</mark>

**sort\_by\_value(dict, b) -** сортирует словарь по значениям.

Параметры:\ <mark style="color:красный;">**!**</mark>**&#x20;dict**— словарь\
**b** — порядок сортировки (False — по возрастанию (по умолчанию), True — по убыванию)

</details>

<details>

<summary>Пример</summary>

Пример сортировки массива по убыванию и словаря по возрастанию:

<div data-with-frame="true"><figure><img src="/files/7a717a6a935c5cfc319368567e211236fe21574c" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/ef377e494716941b8aa3ebd4d59b501e1f523f07" alt="" width="375"><figcaption><p>результат сортировки</p></figcaption></figure></div>

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

<figure><img src="/files/cc0c1b56aad8c5ebf470e3ae1b27e6f751836fca" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/133e35e14cf064ad78e48c00a7145a536aa53088" alt="" width="375"><figcaption><p>результат сортировки</p></figcaption></figure>

</details>

### Преобразование массива/словаря в кнопки

**tools\_make\_button\_str\_checker() | tools\_check\_user\_input()**

<details>

<summary>Описание</summary>

<mark style="background-color:blue;">**Преобразование массива/словаря в кнопки**</mark>

tools\_make\_button\_str\_checker(values\_list, key, in\_line, button\_type, checker\_with\_numbers)

Параметры:

<mark style="color:красный;">**!**</mark> values\_list — массив строк или словарей, данные из которых будут использованы для построения клавиатуры или нумерованного списка

key — ключ, по которому будет выполняться выбор из массива словарей

in\_line — количество кнопок в строке (по умолчанию: 1)

button\_type — тип кнопок (по умолчанию: reply keyboard). \
Возможные значения:\
0 - reply keyboard,\
1 - inline keyboard (кнопки в тексте)

checker\_with\_numbers — нужно ли добавлять номера кнопок в массив "checker". \
Возможные значения:\
0 - не добавлять номера, \
1 - добавлять номера (по умолчанию: 1 — добавлять номера)

Результат функции — словарь вида:

{"**numbered\_list**":"1. Футболки\n2. Шорты\n3. Носки\n4. Кепки\n","**buttons**":\[{"type":"inline","text":"Футболки","line":0,"index\_in\_line":0},{"type":"inline","text":"Шорты","line":0,"index\_in\_line":1},{"type":"inline","text":"Носки","line":1,"index\_in\_line":0},{"type":"inline","text":"Кепки","line":1,"index\_in\_line":1}],"**checker**":"Футболки;1;Шорты;2;Носки;3;Кепки;4;"}

Затем значения словаря можно подставить в поля конструктора:

<div data-with-frame="true"><figure><img src="/files/6185ab6ddfb5b56aedc08d2016260376aa8da469" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/c43fddb1e29ae89c4718b1ec90654d43fe3f2e6a" alt="" width="375"><figcaption></figcaption></figure></div>

<mark style="background-color:blue;">**Получение значения словаря на основе выбора клиента**</mark>&#x20;

**tools\_check\_user\_input(values\_list, user\_input, key, return\_key)**&#x20;

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;values\_list** — массив строк или словарей, данные из которых будут использованы для построения клавиатуры или нумерованного списка\ <mark style="color:зелёный;">Пример словаря:</mark> \[{"text":"Футболки","price":100},{"text":"Шорты","price":150},{"text":"Носки","price":20},{"text":"Кепки","price":50}]\ <mark style="color:красный;">**!**</mark>**&#x20;user\_input** — значение, введённое пользователем, одно из значений values\_list\ <mark style="color:зелёный;">Пример значения:</mark> Кепки\
**key** — ключ, используемый для выбора из массива словарей values\_list\ <mark style="color:зелёный;">Пример ключа:</mark> text\
**return\_key** — значение, возвращаемое для указанного ключа из values\_list\ <mark style="color:зелёный;">Пример возвращаемого значения:</mark> price

</details>

<details>

<summary>Пример</summary>

Давайте разберём использование функции на примере корзины покупок:

1.Определите массив и преобразуйте его в нумерованный список, кнопки и список возможных значений (для мессенджеров без кнопок) с помощью функции tools\_make\_button\_str\_checker().

<div data-with-frame="true"><figure><img src="/files/c6e1e8d675691788b1275a2c2d16383a1f3b5620" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/d82d550d28fab5cbd190c550f3e3cece4936a8e8" alt="" width="375"><figcaption><p>Результат использования <strong>tools_make_button_str_checker()</strong> функции</p></figcaption></figure></div>

2.Используйте полученные значения buttons и numbered\_list, чтобы обеспечить выбор товара:

<div data-with-frame="true"><figure><img src="/files/9c3e0e5b6758e76f456451739d45869e31d098ae" alt=""><figcaption></figcaption></figure></div>

3.Используйте checker со списком возможных значений, чтобы проверить ввод клиента:

<div data-with-frame="true"><figure><img src="/files/27c9c11a7ed0a183a52ef57f11291cf447d79c87" alt="" width="563"><figcaption></figcaption></figure></div>

4.Наконец, покажите клиенту цену выбранного товара. Это удобно сделать с помощью функции tools\_check\_user\_input()

<div data-with-frame="true"><figure><img src="/files/a3578d63fb0fd669419b9254b7c3f8e3a48be836" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
list = [{"text":"Футболки","price":100},{"text":"Шорты","price":150},{"text":"Носки","price":20},{"text":"Кепки","price":50}]
res = tools_make_button_str_checker(list, "text", "2", "1")
numbered_list = res['numbered_list']
buttons = res['buttons']
checker = res['checker']

res_check = tools_check_user_input(list, user_input, 'text', 'price')
```

</details>

### Выбор данных из массива

<details>

<summary>Описание</summary>

**array\_slice(array, start\_index, end\_index)**&#x20;

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;массив** — массив \ <mark style="color:красный;">**!**</mark>**&#x20;start\_index** — начало среза \
**end\_index** — конец среза (по умолчанию: до конца)

</details>

<details>

<summary>Пример</summary>

Давайте выберем подмассив, начиная с 1-го элемента:

<div data-with-frame="true"><figure><img src="/files/1e2f938cf202e1b3bf8908cc25adf29a68a58f0c" alt="" width="563"><figcaption><p>Пример использования array_slice()</p></figcaption></figure></div>

&#x20;res будет \["Шорты", "Носки", "Кепки"]&#x20;

Ещё один пример выбора подмассива с 0-го по 2-й элемент массива:

<div data-with-frame="true"><figure><img src="/files/ba0e7abf7938fb63afca766097fbcae76bea29c3" alt="" width="563"><figcaption><p>Пример использования array_slice()</p></figcaption></figure></div>

&#x20;res будет \["Футболки", "Шорты"]

</details>

<details>

<summary>Пример кода для копирования</summary>

```
list = ["Футболки", "Шорты", "Носки", "Кепки"] 
res = array_slice(list, 1)

res = array_slice(list, 0, 2)
```

</details>

### Распаковка элементов массива

<details>

<summary>Функция</summary>

unpack\_list(array, var\_name) - этот метод проходит по массиву и создаёт отдельную переменную для каждого элемента массива с именами вроде var1, var2, var3 и т. д.&#x20;

<mark style="color:красный;">**!**</mark> array - обязательный параметр, массив элементов

var\_name - необязательный параметр, строка. Если указан, он используется для именования распакованных элементов. Примеры:

Если var\_name указан, имена переменных формируются с использованием var\_name

var\_name должен соответствовать правилам именования переменных.

</details>

<details>

<summary>Пример</summary>

**Пример 1:**

`array1 = ["one", "two", "three"]`

`ans1 = unpack_list(array1)`

**Результат** — созданы отдельные переменные:

`var1 = 'one'`

`var2 = 'two'`

`var3 = 'three'`

**Пример 2:**

`array2 = ["one", "two", "three"]`

`var_name = 'custom'`

`ans2 = unpack_list(array2, var_name)`

**Результат -** созданы отдельные переменные:

`custom1 = 'one'`

`custom2 = 'two'`

`custom3 = 'three'`

</details>

### Как вернуть список без повторяющихся элементов

<details>

<summary>Описание</summary>

remove\_duplicates(array) - возвращает список без повторяющихся элементов.

<mark style="color:красный;">**!**</mark> array - обязательный параметр. Исходный список элементов с дубликатами.

</details>

<details>

<summary>Пример</summary>

Пример:

arr = \[1, 2, 5, 1, 5, 3]

new\_arr = remove\_duplicates(arr)

Результат - список \[1, 2, 5, 3] будет присвоен переменной new\_arr.

</details>

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

<details>

<summary>Описание</summary>

Создание словаря — объявление словаря

**name\_dictionary = {}**

</details>

### Как очистить словарь

<details>

<summary>Описание</summary>

Очистка — это не что иное, как объявление пустого словаря.

**name\_dictionary = {}**

</details>

### Как получить значение словаря по ключу

<details>

<summary>Описание</summary>

**name\[key] -** получение элемента словаря по ключу

</details>

<details>

<summary>Примеры</summary>

**Пример работы со словарём:**

&#x20;В данном конкретном случае мы обращаемся к значению по ключу "a". Чтобы получить значение из словаря по определённому ключу, используйте следующий формат: name\_dictionary\["key"]

<div data-with-frame="true"><figure><img src="/files/a43bd4ee8a0897cc94420f4aa5c705657b949321" alt="" width="563"><figcaption></figcaption></figure></div>

Ответ:

<div data-with-frame="true"><figure><img src="/files/2b528d3934acb6e3ad53af2bca5e46b5e8e668bc" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
dicts = {"a": "11", "d": "hi"}
/*получение из словаря*/
aa = dicts["a"]
```

</details>

### Как получить список ключей из словаря

<details>

<summary>Описание</summary>

**dict\_keys\_to\_array(data)** — чтобы получить список ключей словаря data

</details>

<details>

<summary>Примеры</summary>

**Пример:** Получить список всех ключей словаря

<div data-with-frame="true"><figure><img src="/files/6fef3ffc171a5ec592942af4d2b6f6e039c24a7f" alt="" width="563"><figcaption></figcaption></figure></div>

**Ответ:**&#x20;

<div data-with-frame="true"><figure><img src="/files/1881e7357b2ab32b4181266de241afeefce92405" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
v={"A1":"апельсин","A2":"абрикос","A3":"мандарин","A4":"яблоко","A5":"груша","A6":"киви","A7":"банан","A8":"персик"} 
key= dict_keys_to_array(v)
```

</details>

### Как получить список значений из словаря

<details>

<summary>Описание</summary>

**dict\_values\_to\_array(data)** - чтобы получить список значений из словаря

</details>

<details>

<summary>Примеры</summary>

Пример:

<div data-with-frame="true"><figure><img src="/files/cbc0ccfa2db523842eb5635ae30f76ec9a40fa64" alt="" width="563"><figcaption></figcaption></figure></div>

Ответ:

<div data-with-frame="true"><figure><img src="/files/855d3a160ad531c1deac8040a73c450cf0d3e5d1" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
v={"A1":"апельсин","A2":"абрикос","A3":"мандарин","A4":"яблоко","A5":"груша","A6":"киви","A7":"банан","A8":"персик"}
value= dict_values_to_array(v)
```

</details>

### Как получить значения из списка словарей по указанному ключу

<details>

<summary>Описание</summary>

**get\_values\_by\_key(data, key)** - позволяет получить значения из списка словарей по указанному ключу. Возвращает список значений.

</details>

<details>

<summary>Пример</summary>

Пример: Получение значений из списка словарей по ключу

<div data-with-frame="true"><figure><img src="/files/32fd0fe1ecd3a9f586f6b56583e7b0a546388943" alt="" width="563"><figcaption></figcaption></figure></div>

Ответ:

<div data-with-frame="true"><figure><img src="/files/c8615cb847db081f8c8a28bf61184cf2e317868f" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
data = [{"Product": "Product№1", "Price": 1500}, {"Product": "Product№2", "Price": 6000}]
key = "Product"
result = get_values_by_key(data, key)
```

</details>

### Как заменить значение в словаре&#x20;

<details>

<summary>Описание</summary>

nam&#x65;**\['key'] = value** - замена значения элемента словаря по указанному ключу. Если указан несуществующий ключ, будет добавлен новый элемент словаря.

</details>

<details>

<summary>Описание</summary>

**Пример:**

Чтобы заменить значение конкретного элемента массива, напишите присваивание вида arra&#x79;*\_name\[index] = value или dictionary\_name*\[key] = value

<div data-with-frame="true"><figure><img src="/files/90d41623db5f69014e4c0ace1995ac8e69670f31" alt=""><figcaption></figcaption></figure></div>

Ответ:&#x20;

<div data-with-frame="true"><figure><img src="/files/35d9283fc6b8e19c80069e76345875fa439e2ed5" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
dicts = {"a": "11", "d": "hi"}

/*Замена в словаре*/
dicts['d'] = AAAAA

/*Добавление в словарь   dicts['key'] = 'VVVVVVVVVVV'*/
dicts['m']=new

/*Замена в словаре числом*/
dicts['a'] = int('555')
```

</details>

### Как добавить значение в словарь

<details>

<summary>Описание</summary>

**dictionary\_name*****\['key'] = 'value'** -* добавление нового значения в словарь.&#x20;

{% hint style="warning" %}
Если ключа раньше не было, будет добавлена новая пара ключ–значение; в противном случае значение по указанному ключу будет заменено.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Это пример кода в поле калькулятора

<div data-with-frame="true"><figure><img src="/files/021eabef109c985af8dc67f71d05603c2c540c76" alt=""><figcaption></figcaption></figure></div>

Ответ

<div data-with-frame="true"><figure><img src="/files/1e7455c114410b673589875399ffdb23144b7b19" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
/*добавление нового значения в словарь dicts['key'] = 'VVVVVVVVVVV'*/
dicts['m']=new
```

</details>

### Как проверить, существует ли ключ в словаре

<details>

<summary>Описание</summary>

**exist\_key(mass, key)** - чтобы проверить, существует ли ключ в словаре.

Параметры:&#x20;

**mass -** словарь&#x20;

**key -** ключ для поиска

Возвращает True или False в зависимости от того, найден ли ключ.

</details>

<details>

<summary>Пример</summary>

Пример использования:

<div data-with-frame="true"><figure><img src="/files/f2bcfae10d88763e963dabc7e694f7808e327294" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/c2ae485f6012e5db2cedef6ece32ac5859f4721e" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = {"1": 123, "2": 234, "q": {"w": "e"}} 
q = if(exist_key(s, 'q'), 'Найдено', 'Другая строка')
```

</details>

### Как проверить позицию ключа в словаре

<details>

<summary>Описание</summary>

**key\_index(mass, key)** - чтобы проверить позицию ключа в словаре.

**Параметры:** \
**mass - словарь**  \
**key -** Ключ для поиска.

{% hint style="info" %}
Позиция в словаре отсчитывается от 0. Таким образом, первый элемент — 0, второй элемент — 1 и так далее.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример использования:

<div data-with-frame="true"><figure><img src="/files/49715f13b7fdecf384138b7e9ebedf20bbdae63e" alt=""><figcaption></figcaption></figure></div>

*Результат:*

<div data-with-frame="true"><figure><img src="/files/ab3e9abe53be3b7cdaa4e8722c08f0a00e67955a" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
s = {"1": 123, "2": 234, "q": {"w": "e"}} 
q = key_index(s, 'q')
```

</details>

### Как получить количество элементов в словаре

<details>

<summary>Описание</summary>

**arr\_len(mass)** - чтобы определить длину словаря.&#x20;

Параметр:\
**mass -** *словарь*&#x20;

Результат: Возвращает число — длину словаря.

{% hint style="warning" %}
Будьте внимательны When passing a parameter to the function: if the function is called without parameters, it returns 0; if the parameter is not a list or a dictionary, it returns -1.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример использования:

<div data-with-frame="true"><figure><img src="/files/a10a77cd4872c6731fac19a4f42804900a613460" alt=""><figcaption></figcaption></figure></div>

Ответ:

<div data-with-frame="true"><figure><img src="/files/dc8a85e0cf72a1c443fb599af2f967656e05d068" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

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

<details>

<summary>Описание</summary>

По индексу или ключу

**del(mass, key)** - чтобы удалить элемент из списка по индексу или из словаря по ключу.\
Принимает два параметра: список/словарь и индекс/ключ для удаления.\
Возвращает изменённый словарь или список без изменения исходного объекта.

{% hint style="warning" %}
Если значения в списке или словаре являются числами, используйте функцию remove() для удаления элемента.
{% endhint %}

</details>

<details>

<summary>Пример</summary>

Пример со словарём

<div data-with-frame="true"><figure><img src="/files/150e38183e19a9b320dc304bd1860293e58c0f02" alt=""><figcaption></figcaption></figure></div>

Результат

<div data-with-frame="true"><figure><img src="/files/d4296822a2c0faf87b26a3e786bc3ce02a02aca4" alt="" width="563"><figcaption></figcaption></figure></div>

Пример с массивом

<div data-with-frame="true"><figure><img src="/files/fec134553a0dc30ca1439517f7f532acf709d285" alt="" width="563"><figcaption></figcaption></figure></div>

Результат

<div data-with-frame="true"><figure><img src="/files/7dbdd74d8e746e1170acf58fa291b655593c3ca5" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

Пример со словарём

`s={"1":123, "2":234, "q":{"w":"e"}}`<br>

`q=del(s,'q')`

Пример с массивом

`s=["John", "Ann", "Sophie"]`\ <br>

`q=del(s, 1)`

</details>

### Как преобразовать словарь в удобочитаемый текст

<details>

<summary>Описание</summary>

**humanize(dict, delimiter, from\_i, to\_i)**&#x20;

Параметры:

**dict** - имя словаря\
**delimiter** - разделитель между строками\
**from\_i** - индекс элемента, с которого начинать вывод (нумерация с 0)\
**to\_i** - индекс элемента, на котором заканчивать вывод (не включительно)

</details>

<details>

<summary>Пример</summary>

Рассмотрим пример:

<div data-with-frame="true"><figure><img src="/files/58f0a86ee97124c9e135f5bdf641dc8d3bacd87b" alt="" width="563"><figcaption></figcaption></figure></div>

Ответ

<div data-with-frame="true"><figure><img src="/files/725ca51171a05455c24ea2ada955fe8713c20bde" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

```
dict = {"[id146467928|Alex]":"6","[id145255525|Маx]":"20"}
r = humanize(dict, ': ')
```

</details>

### Для сортировки словарей&#x20;

sort() | sort\_by\_value()

<details>

<summary>Описание</summary>

<mark style="background-color:blue;">**Сортировка словаря**</mark>

**sort(dict, b)** - Сортирует список по значению, а словарь по ключу

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;dict**— словарь

**b** - направление сортировки (False — по возрастанию по умолчанию, True — по убыванию)

<mark style="background-color:blue;">**Сортировка словаря по значениям**</mark>

**sort\_by\_value(dict, b) -** Сортировка словаря по значениям.

Параметры:

<mark style="color:красный;">**!**</mark>**&#x20;dict**— словарь

**b** - направление сортировки (False — по возрастанию по умолчанию, True — по убыванию)

</details>

<details>

<summary>Примеры</summary>

Пример: сортировка списка по убыванию и словаря по возрастанию:

<div data-with-frame="true"><figure><img src="/files/938ad678c4706fa2cf853c2500dce7afd377a5e3" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/732f4790981914e900160c112af905febc73f10d" alt="" width="375"><figcaption></figcaption></figure></div>

Сортировка словаря по его значениям:

<div data-with-frame="true"><figure><img src="/files/d614a458c2122323e1680d80f50a4d5460b31b8a" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/a9ec4326c6f5bc803235926dbcbe40b9a944f262" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Пример кода для копирования</summary>

Пример: сортировка списка по убыванию и словаря по возрастанию:

`array1=[5,4,0,6,3,0]`<br>

`array1=sort(array1, True)`

`dict={"Ann":5, "John":4, "Sophie":0, "Alex":6, "Kate":3, "Harry":0}`

`dict=sort(dict)`

Сортировка словаря по его значениям:

`dict={"Ann":5, "John":4, "Sophie":0, "Alex":6, "Kate":3, "Harry":0}`&#x20;

`dict=sort_by_value(dict)`

</details>


---

# 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.mavibot.ai/doc/ru/chatbot/functions/kalkulyator/arrays.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.
