170 похожих чатов

Нужен совет по рефакторингу. Имеется участок кода, где в двух

циклах for заполняются два словаря по одной и той же логике: https://dpaste.org/39ZA
Как можно отрефакторить код, чтобы избежать повторения участков (двух циклов, выполняющих похожие действия)? Правильно ли будет вынести что-то в функцию?

7 ответов

19 просмотров

да, достаточно передать аргуаментом последовательность, по которой функция будет итерироваться и вернуть из функции словарь.

а что тут происходит вообще? почему это словари и т.п.

def your_function_name(objects): result = {} for obj in objects: ... return result

Victor- Автор вопроса

Есть пара списков объектов (читай датаклассов), у которых есть атрибуты name. Нужно сопоставить эти объекты между списками по их именам. При этом иногда нужно сопоставлять по именам, игнорируя регистр букв и пробелы в именах. Сначала я создаю эти словари, а потом кортеж кортежей из них, в каждом кортеже два сопоставленных датаклассса (или None, если где-то не нашлось пары): comparison_items = tuple( (component_templates_dict.get(component_name), components_dict.get(component_name)) for component_name in sorted(set().union(component_templates_dict.keys(), components_dict.keys())) )

def get_key(settings): def key(obj): res = obj.name if settings.ignore_case: res = res.casefold() if settings.igno_space: res = res.replaces(" ", "") return res return key def collect(components, key): return {key(obj): obj for obj in components} component_templates_dict = collect(comparison_component_templates, get_key(settings)) components_dict = collect(comparison_component_templates, get_key(settings))

Victor
Есть пара списков объектов (читай датаклассов), у ...

а через получение имени переменной и последующего сравнения с приведением к апперу или подобном

Victor- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта