@HelloArt

Как сделать код более компактным?

Подскажите пожалуйста как сделать это более компактным) Только начал изучить парсинг и хочу как-то это сократить)
# Берет самый последний год в отчете организации на которую дал ссылку
# Например эта организация выставила отчет в 2021 году последний раз
self.label_20.setText(year1 := list(data)[10])  # 2021 
self.label_21.setText(year2 := list(data)[9]) #2020
self.label_22.setText(year3 := list(data)[8]) #2019
self.label_23.setText(year4 := list(data)[7]) #2018
self.label_24.setText(year5 := list(data)[6]) #2017
# 1200, 1500, 1250 - строки бух. баланса
#Коэффициент текущей ликвидности
self.label_26.setText("{:.2f}".format(data[year1]['values']['1200']/data[year1]['values']['1500']))
self.label_27.setText("{:.2f}".format(data[year2]['values']['1200']/data[year2]['values']['1500']))
self.label_28.setText("{:.2f}".format(data[year3]['values']['1200']/data[year3]['values']['1500']))
self.label_29.setText("{:.2f}".format(data[year4]['values']['1200']/data[year4]['values']['1500']))
self.label_30.setText("{:.2f}".format(data[year5]['values']['1200']/data[year5]['values']['1500']))
#Коэффициент абсолютной ликвидности
self.label_32.setText("{:.2f}".format(data[year1]['values']['1250'] / data[year1]['values']['1100']))
self.label_33.setText("{:.2f}".format(data[year2]['values']['1250'] / data[year2]['values']['1100']))
self.label_34.setText("{:.2f}".format(data[year3]['values']['1250'] / data[year3]['values']['1100']))
self.label_35.setText("{:.2f}".format(data[year4]['values']['1250'] / data[year4]['values']['1100']))
self.label_36.setText("{:.2f}".format(data[year5]['values']['1250'] / data[year5]['values']['1100']))
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 3
Vindicar
@Vindicar
RTFM!
self.label_20
Если ты ловишь себя на таком, пора заводить список и хранить ссылки на элементы в нём. Заодно позволит генерить эти элементы динамически.
Ответ написан
Комментировать
aRegius
@aRegius
Python Enthusiast
Начните с малого - какие-либо повторяющиеся конструкции. Ну и дальше уже раскручивайте, отталкиваясь от этого.
Навскидку:
data['2021']['values']['1500']
это извлечение значения ключа у вас дублируется 4 раза - вынесите в переменную:
my_var = data['2021']['values']['1500']

Далее:
spoiler
data['2020']['values']['1250']
тут меняется только год - вынесите в функцию:
def my_func(year, val='values', val_num='1250'):
	  return data[year][val][val_num]

Итого, уже имеем (было/стало):
format(data['2019']['values']['1250'] / data['2021']['values']['1500']))
format(my_func('2019') / my_var)

Далее:
зачем нам деление на одно и то же значение каждый раз прописывать вручную - можно один раз прописать в функции:
def my_upgrade_func(year, val='values', val_num='1250'):
	  return data[year][val][val_num] / my_var

Итого, имеем:
format(data['2019']['values']['1250'] / data['2021']['values']['1500']))
format(my_func('2019') / my_var)
format(my_upgrade_func('2019'))

Ну, как-то так, ход мыслей такой... Многое не учтено, конечно - названия переменных, функций делайте осмысленными; проверку на наличие ключей в словаре делайте (либо используйте метод get()); и тд...
Ответ написан
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Ну, как минимум вместо .format, можно использовать f-строки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы