Пожалуйста, помогите оптимизировать нечитабельный участок кода
Предыстория к коду: есть файл xlsx, в котором находятся объединенные ячейки, но объединены они криво, там где не нужно они объединены, там где нужно - могут быть обычными. Я решил, что легче взять просто всё строчки из этого файла, которые мне нужны, а значения None (None будут появляться, т.к. в объединенных ячейках заполняется лишь первая, крайняя левая), буду преобразовывать к прошлому значению, которое было известно. Всё это отрабатывает как нужно, теперь к коду:
mvz_list = ['1', '1', '1', '2', '3', '4', '5', '6', '7', '7']
filials = ['Краснодар', 'Краснодар', 'Краснодар', 'Москва', 'Санкт-Петербург', 'Санкт-Петербург', 'Сочи', 'Владимир', 'Владимир', 'Владимир']
list_of_all_used_values = []
for i, value_mvz in enumerate(mvz_list):
print('-----------------------------------------------')
print(f'Берем {value_mvz}')
list_for_one_filial = []
counter = 1
if value_mvz not in list_of_all_used_values:
list_of_all_used_values.append(value_mvz)
list_for_one_filial.append(value_mvz)
for i2 in range(len(mvz_list[i+1:])):
if filials[i] == filials[i+counter]:
if mvz_list[i + counter] not in list_of_all_used_values:
list_for_one_filial.append(mvz_list[i + counter])
list_of_all_used_values.append(mvz_list[i + counter])
counter+=1
else:
counter+=1
print(f'Временный список для филиала {filials[i]}: {list_for_one_filial}')
print(f'Список уже использованных значений: {list_of_all_used_values}') #Принтую просто для наглядности, чтобы посмотреть, что всё работает как нужно
print('-----------------------------------------------')
print(f'Производим некоторые действия для "временного списка": {list_for_one_filial}')
Списки mvz_list и filials - это и есть то, что я получаю при парсинге Excel своим способом, описанным выше.
Далее мне необходимо перебрать списки и для каждого филиала сформировать свой временный список со всеми значениями, которые относятся только к нему. Это определяется порядковым номером в списка. Если у mvz_list[0] и mvz_list[1] одинаковые filials[0] и filials[1] - значит это нам подходит и мы добавляем оба значения к временному списку этого филиала, чтобы уже далее работать с этим временным списком.
Конкретно этот кусок кода мне совершенно не нравится, но я не знаю, как же именно лучше сделать, чтобы сохранить хоть какую-то читабельность и функциональность. Заранее извиняюсь, что расписал целую поэму, это сделано для того, чтобы была полная картина ситуации.
Если запустите код, то принтами будет выводиться то, что я имел ввиду.
Ответы (1 шт):
Так не проще будет:
mvz_list = ['1', '1', '1', '2', '3', '4', '5', '6', '7', '7']
filials = ['Краснодар', 'Краснодар', 'Краснодар', 'Москва', 'Санкт-Петербург', 'Санкт-Петербург', 'Сочи', 'Владимир', 'Владимир', 'Владимир']
filial_mvz = dict()
for i in range(0, len(mvz_list) - 1):
filial = filials[i]
if filial in filial_mvz:
mvz_set = filial_mvz[filial]
else:
mvz_set = set()
filial_mvz[filial] = mvz_set
mvz = mvz_list[i]
mvz_set.add(mvz)
for filial, mvz_set in filial_mvz.items():
list_for_one_filial = list(mvz_set)
print(f'Временный список для филиала {filial}: {list_for_one_filial}')
print('-----------------------------------------------')
?