Salebot.pro
Search…
Работа с массивами и словарями
Работа в Salebot с такими типами данных как словарь и массив
Массив — это структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу. Задается через []. Запись вида q = [] означает, что в переменной q лежит массив без элементов. Если же q = [2,5,7,4,9] - то в нашем массиве лежит 5 элементов - это длина массива. Индексы элементов, их адрес в массиве, начинаются с 0. Таким образом индекс элемента “2” будет 0, а индекс элемента “4” в нашем массиве - 3.
Словарь — это структура данных, представляющая собой специальным образом организованный набор элементов хранимых данные. Все данные хранятся в виде пар ключ-значение. Доступ к элементам данных осуществляется по ключу. Ключ всегда должен быть уникальным в пределах одного словаря, данные могут дублироваться при необходимости.
Запись вида s = {} означает, что в переменной s лежит словарь, не содержащий элементов. Мы можем положить туда пару ключ-значение, или даже несколько: s = {"ключ1":"значение1", "ключ2":"значение2","ключ3":"значение3"} Каждый ключ и значение заключаются в кавычки, между ключом и значением ставится двоеточие, а пары ключ-значение разделяются запятой.
Массивы и словари могут быть вложенными. Рассмотрим пример:
радуга = [красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый] - это массив.
Если мы запишем
радуга = {"каждый":"красный","охотник":"оранжевый","желает":" желтый","знать":"зеленый","где":"голубой","сидит":"синий","фазан":"фиолетовый"}
- то у нас получится словарь. Если же мы внимательно присмотримся к радуге, то заметим например, что голубой цвет у нас не однородный, а состоит из бирюзового, светло-голубого и темно-голубого цвета. Запишем: голубой = [бирюзовый,светло-голубой, темно-голубой]. А теперь вложим наш массив “голубой” в словарь “радуга”:
радуга = {"каждый":"красный","охотник":"оранжевый","желает":" желтый", "знать":"зеленый","где": [бирюзовый,светло-голубой, темно-голубой],"сидит":" синий","фазан":"фиолетовый"}
Как же нам указать в таком случае адрес элемента, допустим “бирюзовый”? В словарях адресация идет по ключу. Значит, адресом массива [бирюзовый,светло-голубой, темно-голубой] будет являться ключ “где”. А в массиве адресом является индекс, значит у элемента “бирюзовый” адресом будет 0. Собираем все вместе, разделяя ключи вертикальной чертой: где|0 - вот адрес элемента “бирюзовый”

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

При получении ответов от сторонних сервисов про API чаще всего мы получаем JSON, представляющий из себя словарь. Зачастую встает задача сохранить в переменную какое-то значение из этого словаря.
Лучше всего можно понять принцип адресации при работе с JSON на примере. {"suggestions": [{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]}
Здесь мы имеем словарь, содержащий одну пару ключ-значение 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": [{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]}
Самый длинный ключ в этом JSON: suggestions|0|data|strcode - ключ для значения BYN
{"suggestions": [{"value": "Белорусский рубль", "unrestricted_value": "Белорусский рубль", "data": {"code": "933", "strcode": "BYN", "name": "Белорусский рубль", "country": "Беларусь"}}]}
Ключи разделяются вертикальной чертой. Если в JSON есть массив, то доступ к его элементу идет по номеру, начиная с 0 и также записывается через вертикальную черту. Нумерация в массиве идет с 0
В адресации числа приравниваются к строкам и наоборот. То есть равнозначно '6' и 6.
Помимо ответов по API, массивы и словари могут использоваться для удобного хранения данных.
К примеру, вам необходимо ограничить круг лиц, имеющих доступ к определенному разделу бота. Вы можете сохранить список их ID в массив, положив его в общую переменную проекта и в условиях блоков или стрелок проверяете вхождение id пользователя в этот массив.
Другой пример, когда вам надо сохранить например количество баллов у каждого игрока в командной игре. Для этого вы можете использовать словарь, ключами в котором будут ID пользователей, а значениями - их баллы.
Временами возникает задача изменить какой-либо массив или словарь. Функции, описанные в этой статье созданы именно для этого. Большинство методов, описанных ниже, работают и с массивами, и со словарями.

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

get(mass, key, b) - для получения элемента массива или словаря. 3 параметра. Словарь или массив и ключ для поиска обязательные параметры. Третий параметр не обязательный. Если передать False, то вертикальная черта в ключе будет считаться как часть ключа, а не разделитель. Возвращает найденное значение.
Если ключ не найден, то вернется None
Если вам надо в ключе использовать вертикальную черту, то предайте третьим параметром False.
Пример со словарем:
s = {"1": 123, "2": 234, "q": {"w": "e"}} q = get(s, 'q')
чтение элемента словаря по ключу q
Пример с массивом:
m=[1,2,3,4] q = get(m, 0)
чтение значения элемента массива с индексом 0

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

set(mass, key, value) - для создания нового массива или словаря с измененным значением. На входе 3 параметра. Словарь(массив), ключ(индекс) и значение для записи обязательные. Метод возвращает изменённую строку.
Метод не меняет исходную переменную!
Пример со словарем:
Этот код заменяет значение по ключу q. Результатом будет: {"1":123,"2":234,"q":"text"}
Пример со словарем: s = {"1": 123, "2": 234, "q": {"w": "e"}} q = set(s, 'q', 'text')
изменение значения словаря по ключу q
Пример с массивом: m=[1,2,3,4] q = set(m, 0, 'Привет')
Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный параметр True. Он означает, что вы вставляете JSON.
Если вам надо в ключе использовать вертикальную черту, то предайте четвертым параметром False.Третим параметром можно передать значение по умолчанию False.

Как проверить наличие ключа

exist_key(mass, key) - для проверки наличия ключа в словаре. Два параметра: словарь и ключ для поиска.
Возвращаемое значение True или False, в зависимости найден ключ или нет.
Пример использования:
s = {"1": 123, "2": 234, "q": {"w": "e"}} q = if(exist_key(s, 'q'), 'Найдено', 'Еще строка')

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

key_index(mass, key) - для проверки позиции ключа в словаре. Два параметра: словарь и ключ для поиска.
Позиция в словаре считается с 0. Таким образом первый элемент будет 0, второй элемент будет 1 и так далее.
Пример использования:
s = {"1": 123, "2": 234, "q": {"w": "e"}} q = key_index(s, 'q')
В результате q = 2

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

in_array(mass, value) - для проверки наличия элемента в массиве. Для параметра: массив и значение для поиска.
Возвращаемое значение True или False, в зависимости найдено значение или нет.
Пример использования:
s = ["Вася", "Петя", "Лена"] q = if(in_array(s, 'Аня'), 'Найдено', 'Еще строка')

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

arr_len(mass) - для определения длины массива или сколько значений в словаре. Принимает один параметр - словарь или массив. Возвращает число.
Будьте внимательны при передаче параметра в функцию! Если вызвать функцию без параметров, вернет 0, если в параметрах не массив и не словарь, вернет -1.
Пример использования
массив:
s = ["Вася", "Петя", "Лена"] q = if(arr_len(s) > 5, 'Группа укомплектована', 'Присоединяйтесь в наши ряды!')
словарь:
s = {"Dima": 4, "Sveta": 3, "Anna": 15} i = arr_len(s)

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

append(mass, element) - для вставки элемента в конец массива. Два параметра: массив и вставляемый элемент. Возвращает массив, в который добавлено значение в конец. Исходная строка не меняется.
Пример использования:
s = ["Вася", "Петя", "Лена"] q = append(s, 'Никита')
В переменной s в результате будет находиться ["Вася", "Петя", "Лена"], а в q ["Вася", "Петя", "Лена", "Никита"]
Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный парамтер True. Он означает, что вы вставляете JSON.

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

insert(mass, index, value) - для вставки элемента в определенную позицию массива. Три параметра: массив, позиция для вставки, значение. Возвращает массив, в который добавлено значение в указанную позицию. Исходная строка не меняется.
s = ["Вася", "Петя", "Лена"] q = insert(s, 1, 'Никита')
В переменной s в результате будет находиться ["Вася", "Петя", "Лена"], а в q ["Вася", "Никита", "Петя", "Лена"]
Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный парамтер True. Он означает, что вы вставляете JSON.

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

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

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

По значению

remove(mass, value) - для удаления значения из массива. Принимает два параметра: массив и значение, которое необходимо удалить из массива. Возвращает измененный массив, исходную строку не меняет.

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

index(mass, value) - для определения позиции элемента в массиве. Принимает два параметра: массив и значение, позицию которого нужно вывести. Если элемента нет в массиве, вернет -1.

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

humanize(s, delimiter=' ', from_i=0, to_i=9999) - для перевода из словаря в человекочитаемый текст. Каждая пара ключ значение с новой строки. Разделены пробелом или знаком, который вы передадите вторым параметром. Первый параметр json.
Если вам надо вывести на экран часть, по дополнительно передайте индекс стартового элемента и до какого выводить(не включительно). Нумерация начинается с нуля.
Пример: dict = {"[id146467928|Дмитрий]":"6"} r = humanize(dict, ': ')
в переменной dict будет [id146467928|Дмитрий]: 6

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

Для вывода массивов в виде читаемого текста используйте метод massive_to_text(massive, header, numbered), где massive – массив, который нужно вывести, header – необязательный параметр, при использовании укажите заголовок, который появится в начале текста, зз0 numbered – необязательный параметр, при передаче в нем любого значения элементы массива будут пронумерованы, delimiter1 – необязательный параметр, укажите что будет использоваться в конце строки с элементом (по умолчанию знак ‘;’), delimiter2 – необязательный параметр, укажите что будет использоваться после номера элемента при использовании нумерации (по умолчанию знак ‘)’)
Massive1 = [1, 2, 3, "a", "b", "c"]
text = massive_to_text(Massive1, 'заголовок', 1)
Например, в Telegram данный пример будет выведен так:

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

except_arr(s1, s2) - Для исключения одного массива из другого. Принимает 2 параметра, где s1 массив откуда надо исключить, s2 массив элементы которого исключают
Пример:
s1 = [1, 2, 3] s2 = [2, 3] s3 = except_arr(s1, s2)
В переменной s3 будет [1]

Для сортировки массивов и словарей

Salebot может сортировать массивы, словари по значению и словари по ключу в возрастающем и убывающем порядке.
sort(mass, b) сортировка массива или словаря. Принимает 2 параметра. JSON для сортировки и направление сортировки. Второй параметр не обязателен, по умолчанию сортирует по возрастанию (b = False), для сортировки по убыванию нужно передать True.
Результат: [0,0,1,3,4,5,6,7]
Результат: {"Anna":15,"Dima":4,"Sveta":3}
sort_by_value(dict, b) - сортировка словаря по значениям. Принимает 2 параметра. JSON для сортировки и направление сортировки. Второй параметр не обязателен, по умолчанию сортирует по возрастанию(b = False), для сортировки по убыванию нужно передать True.
Результат: {"Sveta":3,"Dima":4,"Anna":15}

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

Для этого необходимо использовать метод shuffle_massive(massive), где massive - это массив, элементы которого нужно перемешать.
Massive1 = [1, 2, 3, "a", "b", "c"] Massive2 = shuffle_massive(Massive1)
Если выводить оба списка ответным сообщением, то увидите как при каждом вызове элементы перемешиваются:
В переменных клиента остается вариант после последнего перемешивания:
Copy link
On this page
Как работать с адресацией (JSON)
Как получить элемент массива или словаря
Как записать значение в массив или словарь
Как проверить наличие ключа
Как проверить позицию ключа в словаре
Как проверить наличие элемента в массиве
Как узнать длину массива или количество элементов в словаре
Как вставить элемент в конец массива
Как вставить значение в определенную позицию массива
Как удалить элемент из массива или словаря
По индексу или ключу
По значению
Как узнать позицию элемента в массиве
Как перевести словарь в человекочитаемый текст
Как перевести массив в человекочитаемый текст
Как исключить один массив из другого
Для сортировки массивов и словарей
Как перемешать элементы массива