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

Работа в Salebot с такими типами данных как словарь и массив

API чаще всего возвращает JSON и временами возникает задача изменить его. Функции, описанные в этой статье созданы именно для этого.

Массив (список) — структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу.

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

Адресация

Лучше всего можно понять принцип адресации при работе с JSON на примере.

{"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 - ключ для значения "Белорусский рубль"

Самый длинный ключ в этом JSON:

suggestions|0|data|strcode - ключ для значения BYN

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

Нумерация в массиве идет с 0

Нумерация в массиве идет с 0

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

Разницы между словарем и массивом нет. Массив является частью словаря или если в массиве находятся словари. Раздельные примеры для массива и словаря примеры сделаны для удобства понимания.

Получение элемента массива или словаря

get - получение элемента массива или словаря. 3 параметра. Словарь или массив и ключ для поиска обязательные параметры. Третий парамтер не обязательный. Если преедать False, то вертикальная черта в ключе будет считаться как часть ключа, а не разделитель. Возвращает найденное значение.

Если ключ не найден, то вернется None

Если вам надо в ключе использовать вертикальную черту, то предайте третьим парамтером False.

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

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

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

Запись значения в массив или словарь

set - создать новый массив или словарь с измененным значением. 4 параметра. Словарь(массив), ключ(индекс) и значение для записи обязательные. Метод возвращает изменённую строку.

Метод не меняет исходную переменную!

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

Этот код заменяет значение по ключу q. Результатом будет: {"1":123,"2":234,"q":"text"}

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

Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный парамтер True. Он означает, что вы вставляете JSON.

Если вам надо в ключе использовать вертикальную черту, то предайте четвертым парамтером False.Третим парамтером можно передать значение по умолчанию False.

Проверка наличия ключа

exist_key - проверка наличия ключа в словаре. Два параметра: словарь и ключ для поиска.

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

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

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

Проверка наличия элемента в массиве

in_array - проверка наличия элемента в массиве. Для параметра: массив и значение для поиска.

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

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

s = ["Вася", "Петя", "Лена"] q = if(in_array(s, 'Аня'), 'Найдено', 'Еще строка')

Длинна массива или количество элементов в словаре

arr_len - определение длинны массива или сколько значений в словаре. Принимает один параметр - словарь или массив. Возвращает число.

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

s = ["Вася", "Петя", "Лена"] q = if(arr_len(s) > 5, 'Группа укомплектована', 'Присоединяйтесь в наши ряды!')

s = {"Dima": 4, "Sveta": 3, "Anna": 15} i = arr_len(s)

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

append - вставка элемента в конец массива. Два параметра: массив и вставляемый элемент. Возвращает массив, в который добавлено значение в конец. Исходная строка не меняется.

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

s = ["Вася", "Петя", "Лена"] q = append(s, 'Никита')

В переменной s в результате будет находиться ["Вася", "Петя", "Лена"], а в q ["Вася", "Петя", "Лена", "Никита"]

Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный парамтер True. Он означает, что вы вставляете JSON.

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

insert - вставка элемента в определенную позицию массива. Три параметра: массив, позиция для вставки, число. Возвращает массив, в который добавлено значение в указанную позицию. Исходная строка не меняется.

s = ["Вася", "Петя", "Лена"] q = insert(s, 1, 'Никита')

В переменной s в результате будет находиться ["Вася", "Петя", "Лена"], а в q ["Вася", "Никита", "Петя", "Лена"]

Данные по умолчанию вставляются как строки, если вам надо вставить массив или словарь, передайте дополнительный парамтер True. Он означает, что вы вставляете JSON.

Удаление из массива или словаря

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

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

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

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

По значению

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

Позиция элемента в массиве

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

Перевод словаря в человекочитаемый текст

humanize(s, delimiter=' ', from_i=0, to_i=9999) - из словаря делает человекочитаемый текст. Каждая пара ключ значение с новой строки. Разделены пробелом или знаком, который вы передадите вторым параметром. Первый параметр джисон.

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

Пример: dict = {"[id146467928|Дмитрий]":"6"} r = humanize(dict, ': ')

в переменной dict будет [id146467928|Дмитрий]: 6