Работа с массивами и словарями
Работа в 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 - вот адрес элемента “бирюзовый”При получении ответов от сторонних сервисов про 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)
Если выводить оба списка ответным сообщением, то увидите как при каждом вызове элементы перемешиваются:
В переменных клиента остается вариант после последнего перемешивания:
Last modified 1mo ago