Циклы в Python
При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. Например, сохранить 5 пользователей:
user1.save() user2.save() user3.save() user4.save() user5.save()
Кода пока не очень много, но что будет, когда пользователей будет 20? А что если нужно обработать 3 миллиона пользователей вашего сайта? Помогут циклы.
Цикл по списку
Цикл — это запуск одного и того же кода для каждого элемента в списке. Вот как выглядит пример выше с использованием списка и циклов:
users = [user1, user2, user3, user4, user5] for user in users: user.save()
Каждый элемент списка users по очереди подставится в переменную user и для него запустится код с отступом.
Что, всё ещё копипастить пользователей в список? Нет, чаще всего такое не требуется и код выглядит так:
users = get_users_from_database() # возвращает список всех пользователей for user in users: user.do_something() # работа с каждым пользователем по очереди user.save()
Снова, каждый пользователь по очереди попадёт в переменную user , у него вызовется метод .do_something() , а затем метод .save() .
Цикл по словарю
Словарь очень легко можно превратить в 2 списка:
capitals = "Russia": "Moscow", "England": "London", "China": "Beijing", "Italy": "Rome" >
Первый список — ключи словаря (первые элементы в парах):
print(capitals.keys()) # ['Russia', 'England', 'China', 'Italy']
Второй список — значения (вторые элементы в парах):
print(capitals.values()) # ['Moscow', 'London', 'Beijing', 'Rome']
По умолчанию, если передать в for словарь, он начнёт перебирать ключи:
for country in capitals: print(country) # Russia # England # China # Italy
Но так же через ключи словаря можно добраться и до значений:
for country in capitals: capital = capitals[country] print("столица <> это <>".format(country,capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
В Python есть ещё один способ добраться до значений словаря, использовать .items() . Этот метод превращает словарь в список кортежей:
print(capitals) # # "Russia": "Moscow", # "England": "London", # "China": "Beijing", # "Italy": "Rome" # > print(capitals.items()) # [ # ('Russia', 'Moscow'), # ('England', 'London'), # ('China', 'Beijing'), # ('Italy', 'Rome') # ]
И теперь цикл сможет итерироваться сразу по двум переменным:
for country, capital in capitals.items(): print("столица <> это <>".format(country, capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
Выполнить код несколько раз
Что, если нужно выполнить код заранее известное количество раз? например, сгенерировать 10 случайных чисел и вывести на экран? По какому такому списку мне перебиать элементы?
В таком случаевыручает функция range() .
Что она делает проще показать на примерах:
- range(5) — вернёт список из 5 элементов, начинаяс нуля: [0, 1, 2, 3, 4]
- range(2,10) — вернёт список из элементов от 2 до 10: [2, 3, 4, 5, 6, 7, 8, 9]
- range(2,10,3) — вернёт список из каждого третьего элемента от 2 до 10: [2, 5, 8]
Теперь, научившись генерировать списки нужной длины, можно сгенерировать 10 случайных чисел:
import random for number in range(10): print(random.randint(1,100))
В терминал выведется 10 случайных чисел от 1 до 100. Работает так же, как и ранее: range(10) — это список с числами от 0 до 9. Они по очереди подставятся в переменную number , но ни на что не повлияют, т.к. в коде «внутри for » переменная number не используется.
Строка — тоже “список”
Python запросто переводит одни типы данных в другие. Он может притвориться, что строка — это список из её символов:
text = "Девман" for letter in text: print(letter) # Д # е # в # м # а # н
Можно превратить строку в список более явно с помощью функции list() :
text = "Девман" my_list = list(text) print(my_list) # ['Д', 'е', 'в', 'м', 'а', 'н']
Что дальше
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Словари в Python
Раннее были рассмотрены три встроенные коллекции, относящиеся к категории последовательностей — это строки, списки и кортежи. Теперь рассмотрим коллекции, не являющиеся последовательностью. Словарь (dictionary) представляет собой неупорядоченную коллекцию для хранения пар «ключ — значение«. Каждому ключу соответствует конкретное значение. Ключи словаря должны быть неизменяемыми, например строки, числа, кортежи, и уникальными, то есть дубликаты невозможны. Разным ключам могут соответствовать одинаковые значения.
| Содержание страницы: |
|---|
| 1.1. Создание словаря на Python |
| 1.2. Обращение к значению, связанному с ключом в словаре |
| 1.3. Добавление новых пар «ключ-значение» |
| 1.4. Удаление пар «ключ-значение» |
| 1.5. Обращение к значениям методом get() |
| 1.6. Проверка наличия заданного ключа в словаре |
| 2.1. Перебор пар «ключ-значение» методом items() |
| 2.2. Перебор всех ключей в словаре методом keys() |
| 2.3. Перебор всех значений в словаре метод values() |
| 3. Список словарей в Python |
| 4. Список в словаре Python |
| 5. Словарь в словаре Python |
1.1. Создание словаря на Python.
Для создания словаря заключите в фигурные скобки <> список пар «ключ-значение», разделенных запятыми, в форме ключ: значение. Значением может быть число, список, строка и даже другой словарь. В примере ниже хранится информация об одном автомобиле.
В данном примере ключом является ‘марка’, а значение ‘bmw’. Затем через запятую идет следующая пара ключ-значение и так далее. Если вы укажете ключ, то Python вернет значение, связанное с этим ключом. Ключ от значения всегда отделяется двоеточием.
1.2. Обращение к значению, связанному с ключом в словаре Python .
Для получения значения, связанного с ключом в словаре, укажите имя словаря, а затем ключ в квадратных скобках [ ] .
В данном примере возвращается значения связанных с ключом в словаре с помощью f-строк строится сообщение.
1.3. Добавление новых пар «ключ-значение»
В словарь в любой момент можно добавлять новые пары «ключ-значение». Для этого укажите имя словаря, затем в квадратных скобках новый ключ и с помощью команды присваивания укажите значение. Добавим в словарь автомобиля его цвет.
В итоге мы получили в словаре новую пару «ключ-значение» ‘цвет’: ‘белый’. Таким образом можно добавлять неограниченное количество пар.
1.4. Удаление пар «ключ-значение»
- Для удаления пар «ключ-значение» можно воспользоваться командой del . Для этого достаточно передать имя словаря и удаляемый ключ.
- Также пары можно удалять методом словарей pop , который возвращает значение удаляемого ключа.
>>> car_1. pop (‘mileage’)
58135
>>> print (car_1)
1.5. Обращение к значениям методом get() .
Когда вы используете синтаксис с ключом в квадратных скобках, если запрашиваемый ключ не существует, то вы получаете сообщение об ошибке. Воспользовавшись методом get() , вместо ошибки вы получите сообщение об отсутствие заданного ключа в словаре Python. В первом аргументе метода get() передайте ключ, а во втором необязательном аргументе, можно передать значение, которое должно вернуться при отсутствии ключа.
>>> car_1 =
>>> color = car_1. get (‘color’, ‘Такого ключа не существует’)
>>> print (color)
Такого ключа не существует
В результате вместо ошибки, мы получили сообщение о отсутствие ключа в словаре.
1.6. Проверка наличия заданного ключа в словаре Python.
Чтобы проверить содержит ли словарь заданный ключ, можно воспользоваться оператором in или not in :
>>> car_1 =
>>> ‘type’ in car_1
True
>>> ‘color’ in car_1
False
>>> ‘color’ not in car_1
True
2.1. Перебор пар «ключ-значение» методом items() .
Для перебора словаря можно воспользоваться циклом for за которым следует вызов метода items() , возвращающий список пар «ключ-значение». Такой вид перебора хорошо работает для словарей, хранящих один вид информации с разными ключами. В примере ниже создадим словарь связывающий месяц с количеством дней в нем. Воспользуемся f-строками и создадим условия if-else для удобного чтения окончания.
В начале в цикле for Python перебирает все пары «ключ-значение» в словаре. В процессе перебора ключ сохраняется в переменной month, а значение в переменной days. Затем создается условие, если количество дней четное, то выводится команда print с названием месяца и количества дней с окончанием «дней». Если количество не чётное, то пишется «день».
2.2. Перебор всех ключей в словаре методом keys() .
Метод keys() удобен если вы собираетесь работать с ключами в словаре. Переберем словарь и выведем все ключи в нем:
В Python перебор ключей используется по умолчанию при переборе словаря. Две записи ниже дают один и тот же результат.
Явный вызов метода keys() может упростить чтение вашего кода.
Начиная с Python 3.7 перебор содержимого словаря возвращает элементы в том порядке, в каком они вставлялись. Один из способов перебрать элементы в определенном порядке, вызвать функцию sorted() .
>>> for key in sorted( year.keys() ) :
. print (key)
.
апрель
март
февраль
январь
В результате ключи сортируются по алфавиту.
2.3. Перебор всех значений в словаре Python метод values() .
Для получения всех значений в словаре Python без ключей, используют метод values() .
В процессе перебора цикла for значения сохраняются в переменную v и затем выводятся. Значения извлекаются из словаря без проверки на повторения. Чтобы получить значения без повторений можно воспользоваться множеством set() .
3. Список словарей в Python.
В Python можно сохранить множество словарей в списки или список сделать значением элемента словаря. Создание таких сложных структур называется вложениями. Можно вложить не ограниченное количество словарей в список.
Далее создаем пустой список и добавляем в него словари.
Для удобства чтения кода можно вывести элементы списка с помощью цикла for .
В процессе работы может понадобиться изменить какой-либо элемент. Для этого также можно воспользоваться циклом for и командой if-else . К примеру, нам нужно изменить пробег и цвет автомобиля Bmw.
В результате Python перебирает список и проверяет условия, если в паре ключ: значение появляется автомобиль Bmw, то для него меняются элементы, для всех остальных ничего не изменяется.
4. Список в словаре Python.
В словарь Python можно также поместить список. Например, есть словарь с опросами посетителей на сайте, какая марка автомобиля им больше нравится. У одного человека может быть несколько ответов, как раз их можно поместить в список.
>>> favorite_cars = . ‘alex’: [ ‘bmw’, ‘audi’, ‘mersedes’ ] ,
. ‘artem’: [ ‘audi’ ] ,
. ‘phil’: [ ‘ford’, ‘porshe’ ] ,
. ‘jon’: [ ‘lada’ ]
. >
>>> for name, cars in favorite_cars.items():
. print (f»\n любит автомобили марки:»)
. for car in cars:
. print (f»\t»)
.
Alex любит автомобили марки:
Bmw
Audi
Mersedes
Artem любит автомобили марки:
Audi
Phil любит автомобили марки:
Ford
Porshe
Jon любит автомобили марки:
Lada
В процессе перебора словаря имя сохраняется в переменной name, а список в переменную cars. Выводим сообщение с помощью f-строки с именем опрашиваемого, затем с помощью цикла for перебираем элементы списка и выводим названия брендов с новой строки.
5. Словарь в словаре Python
Словарь тоже можно вложить в словарь. Например, словарь с пользователями на сайте. У каждого пользователя хранится информация о нем имя и фамилия.
>>> users =
. ‘qwerty’:
. ‘name’: ‘john’,
. ‘surname’: ‘brut’
. > ,
. ‘fill’:
. ‘name’: ‘philip’,
. ‘surname’: ‘ivanov’
. >
. >
>>> for login, user in users.items():
. print (f»\nВаш логин: «)
. fullname = f» »
. print (f»\tДобро пожаловать на сайт !»)
.
Ваш логин: qwerty
Добро пожаловать на сайт John Brut!
Ваш логин: fill
Добро пожаловать на сайт Philip Ivanov!
У нас определяется словарь users содержащий ключ- логин пользователя и значение — словарь с именем и фамилией. В процессе перебора словаря Python сохраняет ключ в переменной login, а словарь, связанный с ключом в переменной user. Выводим сообщение о логине пользователя на экран. Затем создаем переменную fullname с именем и фамилией извлеченную из словаря и выводим на экран.
Заполнение словаря через цикл


Заполнение словаря
d=<> n=int(input()) for i in range(n): name=input() value=int(input()) d=name .
Рекурсивное заполнение и чтение из словаря
Здравствуйте. Мне необходимо заполнить словарь, так, чтобы получилось дерево. Данные.
Из словаря создается объект, именами атрибутов которого будут ключи словаря
Из словаря создается объект, именами атрибутов которого будут ключи словаря, а значениями -.
Как проверить наличие значения словаря словаря в словаре словарей?
есть массив parsdata, который содержит результаты парсинга. нужно проверить, спарсилось ли что-то.
Регистрация: 05.05.2015
Сообщений: 27

Сообщение было отмечено barracuda1991 как решение
Решение
1 2 3 4 5 6
d = {} for a in range(5): k=str(a+1)+' '+'may' d[k] = a print(d) print('Ves slovar imeet vid: ',d)
![]()
2794 / 2037 / 682
Регистрация: 02.03.2015
Сообщений: 6,509

Сообщение было отмечено barracuda1991 как решение
Решение
Ваш варинат
d.update({k:a})
Хотя если не надо выводить каждый раз то проще сделать с помощью генератора
d = {str(a + 1) + ' may':a for a in range(5)}
Регистрация: 30.07.2015
Сообщений: 121
Ура. Спасибо.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Распечатать натуральные числа от 5 до 15 включительно через цикл for и через цикл while
Напишите программу с помощью указанных циклов: распечатать натуральные числа от 5 до 15.
Заполнение через цикл
Добрый день. Есть два листа ексель. 1.Взять отсюда. 2.Заполнить Задача: Нужно формулы в листе.
Заполнение StringGrid через цикл
Здравствуйте! Сделал программу которая делает заполнение таблицы StrinGrid1 по циклу: 1) Находит.
Заполнение через цикл DataGridView
Здравствуйте. Подскажите пожалуйста, у меня есть допустим 3 DataGridView. Как заполнить их.
Заполнение таблицы через цикл
Здравствуйте. Никак не могу разобраться с заполнением таблицы. Есть таблица Sotrudnik.
Заполнение структуры через цикл
Задание: заполнить массив структур из текстового файла и вывести телефон третьего человека. Не.
Или воспользуйтесь поиском по форуму:
Как заполнить словарь в цикле?
Но в итоге в словарь записывается только одно значение executor, хотя длина словаря «донора» намного больше. Проверяю это так:
print(json.dumps(finalDict, sort_keys=True, indent=4, ensure_ascii=False, separators=(",", ": ")))
Но, если в цикле добавить print(i[‘comments’]) то в терминал выводятся все значение. Как мне заполнить новый словарь всеми значениями? В итоге должно быть так: