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

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

Пример: 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}]

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

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

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

Если мы напишем

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

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

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

rainbow = {"first_color":"красный","second_color":"оранжевый","third_color":"жёлтый","forth_color":"зелёный","sixth_color":"синий","last_color":"фиолетовый"}

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

А в массивах обращение выполняется по индексу, поэтому адрес элемента "turquoise" равен 0.

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

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

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

Лучше всего понять принцип обращения в JSON можно на примере:{"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 ключа является массив всего с одним элементом — словарём: {"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": [{"value": "Dirham", "unrestricted_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}]}

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

{"suggestions": [{"value": "Dirham", "unrestricted_value": "Dirham", "data": {"code": "784", "strcode": "AED", "name": "Dirham", "country": "ОАЭ"}}]}

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

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

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

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

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

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

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

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

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

array_name = []

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

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

array_name = []

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

chevron-rightОписаниеhashtag

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

chevron-rightПримерhashtag

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

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

chevron-rightПримерhashtag

Пример:

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

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

Параметры: ! mass - массив ! value - значение для поиска

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

chevron-rightПримерhashtag

Пример:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

Параметр: ! mass - массив

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

circle-exclamation
chevron-rightПримерhashtag

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

Результат:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

Параметры:

! mass - массив ! element - элемент для вставки priznak — флаг, указывающий, является ли это массивом или словарём

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

circle-exclamation
chevron-rightПримерhashtag

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

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

В этом примере элемент добавляется в массив project.vibpzdr, а значение p удаляется из массива project.pzdr

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

Параметры: ! mass - массив ! index - позиция вставки ! value - value indicator — индикатор добавления в массив или словарь.

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

circle-exclamation
chevron-rightПримерhashtag

Пример:

Результат:

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

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

chevron-rightПример кода для копированияhashtag

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

del() | del | remove()

chevron-rightОписаниеhashtag

По индексу

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

Параметры: ! mass - имя массива; ! key - индекс удаляемого значения

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

circle-exclamation

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

Параметры: ! name- имя массива; ! index- индекс удаляемого значения

По значению

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

Параметры: ! mass - имя массива; ! value - значение для удаления из массива

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

chevron-rightПримерыhashtag

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

index(mass, value)

Параметры: ! mass - имя массива ! value - значение, позицию которого нужно определить.

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

chevron-rightПримерыhashtag

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

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

massive_to_text(massive, header, numbered,delimiter1,delimiter2)

Параметры:

! massive — массив, который нужно отобразить, header — заголовок, который будет отображён в начале вывода numbered — если передано какое-либо значение, элементы массива будут пронумерованы delimiter1 — символ, ставящийся в конце строки каждого элемента (по умолчанию ‘;’), delimiter2 — символ, используемый после номера элемента при включённой нумерации (по умолчанию ‘)’ )

chevron-rightПримерыhashtag

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

except_arr(mas1, mas2)

Параметры:

! mas1 — массив, из которого будут исключаться элементы, ! mas2 — массив, содержащий элементы, которые нужно исключить

chevron-rightПримерыhashtag

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

cross_arr(mas1, mas2)

Параметры:

! mas1 — массив для поиска в нём ! mas2 — массив, содержащий элементы для поиска

chevron-rightПримерыhashtag

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

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

chevron-rightПримерыhashtag

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

sum_array(array)

Параметры:

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

circle-exclamation
chevron-rightПримерыhashtag

Результат:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

shuffle_massive(massive

Параметры:

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

chevron-rightПримерыhashtag

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

chevron-rightПример кода для копированияhashtag

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

sort() | sort_by_value()

chevron-rightОписаниеhashtag

Сортировка в массиве или словаре

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

Параметры:

! mass — массив/словарь b — порядок сортировки (False — по возрастанию (по умолчанию), True — по убыванию)

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

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

Параметры: ! dict— словарь b — порядок сортировки (False — по возрастанию (по умолчанию), True — по убыванию)

chevron-rightПримерhashtag

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

результат сортировки

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

результат сортировки

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

tools_make_button_str_checker() | tools_check_user_input()

chevron-rightОписаниеhashtag

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

tools_make_button_str_checker(values_list, key, in_line, button_type, checker_with_numbers)

Параметры:

! 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;"}

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

Получение значения словаря на основе выбора клиента

tools_check_user_input(values_list, user_input, key, return_key)

Параметры:

! values_list — массив строк или словарей, данные из которых будут использованы для построения клавиатуры или нумерованного списка Пример словаря: [{"text":"Футболки","price":100},{"text":"Шорты","price":150},{"text":"Носки","price":20},{"text":"Кепки","price":50}] ! user_input — значение, введённое пользователем, одно из значений values_list Пример значения: Кепки key — ключ, используемый для выбора из массива словарей values_list Пример ключа: text return_key — значение, возвращаемое для указанного ключа из values_list Пример возвращаемого значения: price

chevron-rightПримерhashtag

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

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

Результат использования tools_make_button_str_checker() функции

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

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

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

array_slice(array, start_index, end_index)

Параметры:

! массив — массив ! start_index — начало среза end_index — конец среза (по умолчанию: до конца)

chevron-rightПримерhashtag

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

Пример использования array_slice()

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

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

Пример использования array_slice()

res будет ["Футболки", "Шорты"]

chevron-rightПример кода для копированияhashtag

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

chevron-rightФункцияhashtag

unpack_list(array, var_name) - этот метод проходит по массиву и создаёт отдельную переменную для каждого элемента массива с именами вроде var1, var2, var3 и т. д.

! array - обязательный параметр, массив элементов

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

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

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

chevron-rightПримерhashtag

Пример 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'

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

chevron-rightОписаниеhashtag

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

! array - обязательный параметр. Исходный список элементов с дубликатами.

chevron-rightПримерhashtag

Пример:

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

new_arr = remove_duplicates(arr)

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

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

chevron-rightОписаниеhashtag

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

name_dictionary = {}

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

chevron-rightОписаниеhashtag

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

name_dictionary = {}

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

chevron-rightОписаниеhashtag

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

chevron-rightПримерыhashtag

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

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

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

dict_keys_to_array(data) — чтобы получить список ключей словаря data

chevron-rightПримерыhashtag

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

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

dict_values_to_array(data) - чтобы получить список значений из словаря

chevron-rightПримерыhashtag

Пример:

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

chevron-rightПримерhashtag

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

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

chevron-rightОписаниеhashtag

Пример:

Чтобы заменить значение конкретного элемента массива, напишите присваивание вида array_name[index] = value или dictionary_name[key] = value

Ответ:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

dictionary_name['key'] = 'value' - добавление нового значения в словарь.

circle-exclamation
chevron-rightПримерhashtag

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

Ответ

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

Параметры:

mass - словарь

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

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

chevron-rightПримерhashtag

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

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

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

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

circle-info

Позиция в словаре отсчитывается от 0. Таким образом, первый элемент — 0, второй элемент — 1 и так далее.

chevron-rightПримерhashtag

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

Результат:

chevron-rightПример кода для копированияhashtag

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

chevron-rightОписаниеhashtag

arr_len(mass) - чтобы определить длину словаря.

Параметр: mass - словарь

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

circle-exclamation
chevron-rightПримерhashtag

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

Ответ:

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

chevron-rightОписаниеhashtag

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

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

circle-exclamation
chevron-rightПримерhashtag

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

Результат

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

Результат

chevron-rightПример кода для копированияhashtag

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

s={"1":123, "2":234, "q":{"w":"e"}}

q=del(s,'q')

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

s=["John", "Ann", "Sophie"]

q=del(s, 1)

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

chevron-rightОписаниеhashtag

humanize(dict, delimiter, from_i, to_i)

Параметры:

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

chevron-rightПримерhashtag

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

Ответ

chevron-rightПример кода для копированияhashtag

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

sort() | sort_by_value()

chevron-rightОписаниеhashtag

Сортировка словаря

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

Параметры:

! dict— словарь

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

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

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

Параметры:

! dict— словарь

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

chevron-rightПримерыhashtag

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

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

chevron-rightПример кода для копированияhashtag

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

array1=[5,4,0,6,3,0]

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}

dict=sort_by_value(dict)

Последнее обновление