нужно заменить ключ в словаре так, чтобы сохранить порядок Python
запарсил погоду на неделю и дни к которым эта температура относится, проблема в том что 3 слова не с тем окончанием что мне нужно, а именно - 'среда', 'пятница', 'суббота'. Нужно чтобы у этих ключей было окончание 'среду', 'пятницу', 'субботу'. вот код:
def weather(soup):
weather = soup.find_all('div', class_='day-temperature')
days = soup.find_all('div', class_='day-week')
only_days = [d.text.lower() for d in days]
only_int = [w.text for w in weather]
w_week = {}
for i in range(len(only_days)):
w_week.update({only_days[i]: only_int[i]})
print(w_week) #{'суббота': '+26°', 'воскресенье': '+26°', 'понедельник': '+28°', 'вторник': '+22°', 'среда': '+23°', 'четверг': '+21°', 'пятница': '+21°'}
данные в словаре динамические и меняются в зависимости от изменений на странице откуда производится парсинг, поэтому при замене ИМЕННО ЭТИХ СЛОВ они должны оказаться на том же месте где и были в словаре. Помогите пожалуйста, а то я уже буксую
Ответы (3 шт):
Формулировка в вопросе сложновата для понимания, но если вы хотите заменить названия ключей, при этом, чтобы к новым ключам были привязаны старые значения, то можно "в лоб" так действовать (рабочий пример для демонстрации, модифицируйте свой код по этой логике - взяв две строки с комментариями и распространив на два других дня):
w_week = {}
w_week['среду'] = 5
print (w_week)
# Создаём новую запись, беря значение из старой
w_week['среда'] = w_week['среду']
# Удаляем старую запись
del w_week['среду']
print (w_week)
Я решил так. Возможно не самый оптимальный вариант. Поясню: Я запускаю цикл с копией словаря и на каждой итерации беру ключ и значение из словаря. Дальше проверяю, если ключ (в данном случае день недели) находится в списке для изменения, я вырезаю значение, сохранив его в буфер. Далее я просто создаю ещё один ключ в словаре с уже изменённым окончанием. Для остальных ключей, которые не нужно исправлять, просто повторяю операцию без изменения окончания (для того чтобы элементы остались на своих местах).
w_week = {'суббота': '+26°', 'воскресенье': '+26°', 'понедельник': '+28°', 'вторник': '+22°', 'среда': '+23°', 'четверг': '+21°', 'пятница': '+21°'}
for key, value in w_week.copy().items():
bufer = w_week.pop(key)
if key in ["среда", "пятница", "суббота"]:
w_week[key[:-1]+"у"] = bufer
else:
w_week[key] = bufer
print(w_week)
Можно еще не исправлять уже полученный словарь, а заменять ключи при его создании. Ну и для простоты сделал проверку не по списку дней недели, которые нужно менять, а по окончанию
w_week = dict(zip(map((lambda x: x if not x.endswith('а') else x[:-1]+'у'), only_days), only_int))