Salebot.pro
Search…
⌃K

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

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

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

имя[индекс или значение] - получение элемента массива или словаря по индексу или значению

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

/*получение по индексу*/
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]
Ответ:

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

в данном конкретном случае идет обращение по ключу со значением a
dicts = {"a": "11", "d": "privet"}
/*получение из словаря*/
aa = dicts["a"]
Ответ:
На экран будет выведено

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

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

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

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

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

имя[индекс] = значение - замена значения элемента массива по заданному индексу
имя['ключ'] = значение - замена значения элемента словаря по заданному ключу. Если указан несуществующий ключ, то произойдет добавление нового элемента словаря
Пример:
array = [1, "2", 3, 4, 5]
dicts = {"a": "11", "d": "privet"}
/*Заменить в массиве\словаре*/
array[2] = 888
dicts['d'] = AAAAA
/*Добавить в словарь dicts['key'] = 'VVVVVVVVVVV'*/
dicts['m']=new
/*Заменить в массиве\словаре на число*/
array[3] = int('888')
dicts['a'] = int('555')
Ответ:

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

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)

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

имя_словаря['ключ'] = 'значение' - добавление нового значения в словарь. Если ключ ранее не существовал, то произойдет добавление ключ: значение. \
Пример:
/*Добавить в словарь dicts['key'] = 'VVVVVVVVVVV'*/
dicts['m']=new

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

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

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

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

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

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

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

По значению

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

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

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 – необязательный параметр, при использовании укажите заголовок, который появится в начале текста, 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]

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

Для того, чтобы просуммировать элементы массива, воспользуйтесь функцией sum_array(array).
Пример: mas = [1,2,3,4] result = sum_array(mas) В ответ Вам придет значение 10
Внимание! Функция работает с массивами определенного вида.
Принимаемый вид - [1,2,3,4] или ‘[1,2,3,4]’. Если внутри массива есть число, представленное в виде строки, оно должно быть заключено в двойные кавычки - например, [1,2,3,”-4”]. Если среди значений массива есть строки с буквенными значениями, вычисления произведены не будут.
Пример: mas = [1,2,3,"a"] result = sum_array(mas)

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

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)
Если выводить оба списка ответным сообщением, то увидите как при каждом вызове элементы перемешиваются:
В переменных клиента остается вариант после последнего перемешивания: