Что такое массив, словарь
Last updated
Last updated
Массив — это структура данных, хранящая набор значений (элементов массива), идентифицируемых по индексу. Задается через []. Запись вида 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 пользователей, а значениями - их баллы.
Временами возникает задача изменить какой-либо массив или словарь. Функции, описанные в этой статье созданы именно для этого. Большинство методов, описанных ниже, работают и с массивами, и со словарями.