Добавление в словарь списка без скобок
Всем привет. Подскажите, пожалуйста, как я могу добавить в словарь ссылки на картинки без [], чтобы в дальнейшем загрузить все товары с картинками на сайт Вот сам код:
import requests #import json from bs4 import BeautifulSoup import csv import re HOST = "САЙТ" CSV = 'parsing.csv' def get_html(url): #берём html стрраницы, которую будем парсить r= requests.get(url) return r def get_url_site(url_category): #Получаем линки сайд бара soup = BeautifulSoup(url_category, 'html.parser') categorys = soup.find_all('dt') urls = [] for item in categorys: if item.find('a').get('href') == None: continue else: urls.append(HOST + item.find('a').get('href')) return urls def get_url_tovar(url_tovar): # Получаем линки товара настранице soup = BeautifulSoup(url_tovar, 'html.parser') tovar = soup.find_all('h4', class_='item-title') urls = [] for item in tovar: if item.find('a').get('href') == None: continue else: urls.append(HOST + item.find('a').get('href')) return urls def get_pagination(url_tovar_pagin): # получаем количество страниц soup = BeautifulSoup(url_tovar_pagin, 'html.parser') PAGINATION = soup.find('div', class_='pagination') if PAGINATION == None: pass else: PAGINATION = soup.find('div', class_='pagination').find_all(string=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19']) for item in PAGINATION: if item.find('a') == None: continue else: return PAGINATION def get_all_tovar(): # получаем линк со всех товаров сайта URL_sidebar = get_url_site(get_html(HOST).text) tovar_url = [] for i in range(1): #len(URL_sidebar) URL_tovar = get_url_tovar(get_html(URL_sidebar[i]).text) num_pagination = get_pagination(get_html(URL_sidebar[i]).text) if num_pagination != None: for item_pagination in range(len(num_pagination)): URL_tovar_1 = get_html(URL_sidebar[i]+"/"+num_pagination[item_pagination]) for b in range (len(get_url_tovar(URL_tovar_1.text))): tovar_url.append(get_url_tovar(URL_tovar_1.text)[b]) else: for c in range (len(URL_tovar)): tovar_url.append(URL_tovar[c]) return tovar_url #print (URL_tovar, num_pagination) get_all_tovar() def save_doc(items, path): with open(path, 'w', newline='') as file: writer = csv.writer(file, delimiter=';') writer.writerow(['название', 'цена', 'картинка', 'Описание'])#заголовки for item in items: writer.writerow( [item['title'], item['price'], item['img'], item['text']])#заголовки def parss(): tovar = [] for a in range(len(get_all_tovar())): connect = get_html(get_all_tovar()[a]).text soup = BeautifulSoup(connect, 'html.parser') tovar_pars = soup.find_all('div', class_='jbzoo') tovar_link = [] for b in tovar_pars: if b.find('h2', class_='element-itemname') == None: continue else: for link in b.find('div', class_='rborder').find_all('a', class_='jbimage-link'): tovar_link.append (HOST+link.get('href')) tovar.append( < 'title':b.find('h2', class_='element-itemname').get_text(), 'price':b.find('span', class_='price-value').get_text(), 'img':tovar_link, 'text':b.find('div', class_='element-textarea').get_text(strip=True), >) save_doc(tovar,CSV) print(tovar, len(tovar)) parss()
Вывод словарь списков без скобок, как это сделать?
У вас получатся так что от знака : Стоит пробел с 2 сторон а надо что бы получилось без пробела т.е
Вот что получается
Вика : 2 0 0 2 0
Даня : 2 1 0 1 3
Лиза : 2 2 0 0 6
А надо
Вика:2 0 0 2 0
Даня:2 1 0 1 3
Лиза:2 2 0 0 6
soremix @SoreMix Куратор тега Python
EvanGun,
ну выведите без пробела
Вызов значений из словаря Python: методы .get() и .setdefault() вместо квадратных скобок
Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.
Dana Moskvina / Skillbox Media
Цокто Жигмытов
Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.
Словарь в Python — это набор из пар «ключ: значение». Основные его свойства:
- В каждой паре ключ (key) указывает на значение (value).
- Ключи уникальны, повторов нет. Значения могут быть одинаковыми.
- В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.
Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки <>.
Обычный (не слишком хороший) способ
Первый способ, который узнают начинающие питонисты, — это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.
author = < "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" > author['username'] >>> 'dao1962' author['age'] >>> Traceback (most recent call last): File "", line 1, in module> author['age'] KeyError: 'age'
Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.
Путей решения этой проблемы несколько:
- Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы — например, сообщение.
try: author['age'] except KeyError: print('Такого ключа нет') >>> 'Такого ключа нет'
- Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё — расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.
Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.
Вызов с помощью .get()
Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:
- Первый (обязательный) — ключ, значение которого мы хотим вызвать.
- Второй (опциональный) — значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None — его метод и вернёт.
author.get('first_name') >>> 'Виктор' author.get('age') # ничего не происходит print(author.get('age')) # поэтому используем print >>> None author.get('age', 'Такого ключа в словаре нет') >>> 'Такого ключа в словаре нет'
Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр — либо None, либо, например, строку с сообщением.
И не надо обрабатывать ошибки и исключения.
Вызов с помощью .setdefault()
Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.
Обнаружив, что вызываемого ключа не существует, метод .setdefault():
- сам создаёт ключ;
- создаёт к нему в пару значение, заданное вами (по умолчанию — None);
- добавляет получившуюся пару в словарь;
- возвращает значение.
Если вы не указали второй параметр, он вернёт None, то есть ничего.
author.setdefault('middle_name') # None - значит ничего author # добавился ключ 'middle_name' со значением None >>> < 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, > author.setdefault('book', 'Омон Ра') >>> 'Омон Ра' author >>> < 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, 'book': 'Омон Ра', >
Обратите внимание, что этот метод не меняет значения у существующих ключей.
Как вывести словарь без скобок python
Питоновский словарь аналогичен HashMap в Java и Object в JavaScript.
Как создать словарь в Python: 6 способов
Пустой словарь создается с помощью фигурных скобок или функции dict():
info_dict = <> my_dict = dict()
Словари с данными, как и в случае со списками, можно создавать несколькими способами.
Способ 1: Перечисление ключей и значений
Данные словаря перечисляются в виде пар ключ: значение через запятую и заключаются в фигурные скобки:
Способ 2: Создание словаря с помощью dict()
При использовании этого метода ключи и значения тоже придется определить вручную:
>>> my_dict = dict(name = 'Евгений', age = 28, position = 'Java-разработчик') >>> print(my_dict)
Способ 3: Создание словаря с помощью zip() и dict()
Если есть два списка, в одном из которых хранятся ключи, а в другом – значения, словарь можно создать при помощи zip() и dict():
>>> keys = ['цвет', 'размер', 'количество', 'цена'] >>> values = ['синий', '35х45х60', 5, 2500] >>> info = dict(zip(keys, values)) >>> print(info)
Способ 4: Создание словаря из списка кортежей и кортежа списков
Если имеется список кортежей, в которых первый элемент служит ключом, а второй – значением, словарь можно сформировать с помощью dict():
>>> item = [('модель', 'Aura'), ('цвет', 'пурпурный'), ('наличие', 'на складе')] >>> item_dict = dict(item) >>> print(item_dict)
Точно так же этот подход работает с кортежeм списков:
>>> employee= (['имя', 'Никита'], ['отчество', 'Сергеевич'], ['фамилия', 'Колобков'], ['возраст', 32]) >>> empl_dict = dict(employee) >>> print(empl_dict)
Способ 5: Метод fromkeys()
Если нужно создать словарь, у всех ключей которого – одинаковые значения, можно воспользоваться методом fromkeys():
>>> new_dict = dict.fromkeys(['север', 'юг', 'восток', 'запад'], 0) >>> print(new_dict)
Способ 6: Использование генератора словарей
Словари можно создавать на основе списков и строк. При этом одновременно можно проводить различные действия с числами и символами – математические операции, подсчет, сравнение и так далее:
>>> numbers = [2, 18, 5, 7, 2, 32, 6, 9, 4, 8, 9, 12, 14, 14] >>> my_dict = >>> print(my_dict)
В генераторах можно использовать преобразование типов данных и условия:
>>> st = '12 31 4 53 6 7 4 90 8 7 56 3 42' >>> my_dict = >>> print(my_dict)
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»
Особенности словарей
Начиная с Python 3.6, словари являются упорядоченными коллекциями – пары ключ: значение хранятся в словаре в порядке добавления. В отличие от строк и списков, словари не поддерживают срезы и конкатенацию, а к элементу словаря нельзя обратиться по индексу – в качестве индексов в словарях выступают ключи:
>>> my_dict = >>> print(my_dict['цвет'], my_dict[' количество ']) красный 53 кг
Ключи в словаре не должны повторяться – если добавить в словарь ключ, идентичный существующему, Python сохранит только один ключ с последним значением:
>>> my_dict = >>> print(my_dict)
В качестве ключей можно использовать все типы данных, которые относятся к неизменяемым: int, float, Boolean (True/False), frozenset, строки, кортежи. Нельзя использовать списки, обычные множества set и словари, поскольку они являются изменяемыми. При этом в качестве значения в словарях можно использовать данные любого типа, включая словари – такие словари называются вложенными:
>>> hr_info = , 'сотрудник2': , 'сотрудник3': > >>> print(hr_info['сотрудник2']['должность']) DevOps
Методы словарей в Python 3
Словари поддерживают некоторые методы, общие с другими типами данных, и имеют несколько своих собственных. Рассмотрим общие и уникальные методы на примерах.
Длина словаря и принадлежность элемента:
>>> my_dict = >>> print(len(my_dict)) 4 >>> print('есть на складе' if 'футболка' in my_dict else 'нет в наличии') нет в наличии
Сумма ключей, максимальный и минимальный элементы
Функция sum() подсчитывает сумму ключей словаря и работает только в том случае, когда ключи являются числами:
>>> my_dict = >>> print(sum(my_dict)) 13
Функции min() и max() работают для большинства типов данных:
>>> my_dict = >>> print(min(my_dict), max(my_dict)) количество цена >>> print(min(my_dict, key=len)) цена
Объединение словарей
Словари можно объединять – если в них есть одинаковые ключи, в полученном словаре значение будет взято из последнего словаря:
>>> my_dict1 = >>> my_dict2 = >>> print(<**my_dict1, **my_dict2>)
Сравнение словарей
Словари считаются одинаковыми, если в них совпадают и ключи, и значения:
>>> my_dict = >>> my_dict2 = >>> print(my_dict == my_dict2) False
Получение ключей, значений и элементов
Для работы с ключами используется метод keys(), со значениями – values(), с парами – items():
>>> my_dict = >>> print(my_dict.values()) dict_values(['чай', 100, 550, 256]) >>> print(my_dict.keys()) dict_keys(['напиток', 'вес', 'цена', 'количество']) >>> print(my_dict.items()) dict_items([('напиток', 'чай'), ('вес', 100), ('цена', 550), ('количество', 256)])
Добавление и изменение элементов
Для изменения значения какого-либо ключа используют оператор присваивания = :
>>> my_dict = >>> my_dict['имя'] = 'Евгений' >>> print(my_dict)
Если же такого ключа в словаре еще нет, новый элемент будет добавлен автоматически:
>>> my_dict = >>> my_dict['фамилия'] = 'Егоров' >>> print(my_dict)
Однако если обратиться к несуществующему элементу без присвоения ему значения, произойдет ошибка:
>>> my_dict = >>> print(my_dict['город']) Traceback (most recent call last): File "", line 1, in KeyError: 'город'
Получение значения по ключу – get()
Чтобы избежать появления показанной выше ошибки, используют метод get(), которому можно передать значение по умолчанию – оно выведется, если такого ключа в словаре нет:
>>> my_dict = >>> print(my_dict.get('зарплата', 'не указана')) не указана
Получение значения и/или добавление элемента с setdefault()
Другой метод для получения значения – setdefault(). Он действует двумя разными способами:
1) Если указанный ключ уже есть в словаре – возвращает его значение (даже при наличии значения по умолчанию):
>>> my_dict = >>> print(my_dict.setdefault('возраст', 'не указан')) 25
2) Если ключа нет – вставляет элемент в словарь, возвращает значение:
>>> my_dict = >>> print(my_dict.setdefault('зарплата', 150000)) 150000 >>> print(my_dict)
Дополнение словаря
Элементы одного словаря можно «обновить», дополнить элементами другого. В случае совпадения ключей, как и при показанном ранее объединении словарей, сохраняются значения второго словаря:
>>> my_dict1 = >>> my_dict2 = >>> my_dict1.update(my_dict2) >>> print(my_dict1)
Удаление элементов словаря
Как и в случае со списками, удалять элементы из словарей можно несколькими способами:
del – удаляет элемент с заданным ключом:
>>> my_dict = >>> del my_dict['название'] >>> print(my_dict)
pop() – возвращает удаленное значение:
>>> my_dict = >>> фильм = my_dict.pop('название') >>> print(фильм) Зеленая миля
popitem() – удаляет последний добавленный элемент и возвращает его ключ: значение в виде кортежа:
>>> my_dict = >>> movie = my_dict.popitem() >>> print(movie) ('название', 'Властелин колец')
clear() – удаляет все элементы словаря:
>>> my_dict = >>> my_dict.clear() >>> print(my_dict) <>
Создание копии словаря
Копия словаря создается тем же методом, что и в случае со списками – с помощью copy():
>>> my_dict = >>> new_dict = my_dict.copy() >>> print(new_dict)
Практика
Задание 1
Напишите программу, которая получает на вход две строки, и формирует из них словарь. Ключами служат слова из первой строки, значениями – целые числа из второй.
Пример ввода:
яблоки сливы груши персики манго киви апельсины 34 56 23 89 55 32 11
keys = input().split() values = map(int, input().split()) my_dict = dict(zip(keys, values)) print(my_dict)
Задание 2
Напишите программу, которая получает на вход строку чисел, разделенных пробелами, и формирует словарь, в котором ключами служат четные числа, а значениями – слово четное .
Пример ввода:
45 6 8 23 21 87 65 45 38
nums = map(int, input().split()) my_dict = print(my_dict)
Задание 3
Напишите программу, которая получает на вход строку и подсчитывает, сколько раз в ней встречается каждый символ (независимо от регистра). Результат нужно вывести без фигурных скобок.
Пример ввода:
Есть только один способ избежать критики: ничего не делайте, ничего не говорите и будьте никем.
е-11 с-3 т-7 ь-4 -14 о-9 л-2 к-4 д-3 и-10 н-6 п-1 б-3 з-1 ж-1 а-2 р-2 :-1 ч-2 г-3 й-1 ,-1 в-1 у-1 м-1 .-1
st = input().lower() my_dict = print(*[str(k) + '-' + str(v) for k, v in my_dict.items()])
Задание 4
Напишите программу, которая получает 2 слова на разных строках и определяет, являются ли эти слова анаграммами.
Пример ввода 1:
меч мяч
Пример ввода 2:
Минотавр Норматив