Я относительно новичок в Python и хотел бы знать, изобретаю ли я колесо заново или делаю что-то непитоническим способом - прочитайте неправильно.
Я переписываю какой-то парсер, изначально написанный на Lua. Существует одна функция, которая принимает имя поля из импортированной таблицы и его значение, выполняет некоторые действия со значением и сохраняет его в целевом словаре под соответствующим именем ключа.
В исходном коде это решается длинным оператором, похожим на switch, с анонимными функциями в качестве действий.
Код Python выглядит следующим образом:
class TransformTable:
target_dict = {}
...
def mapfield(self, fieldname, value):
try:
{
'productid': self.fn_prodid,
'name': self.fn_name,
'description': self.fn_desc,
...
}[fieldname](value)
except KeyError:
sys.stderr.write('Unknown key !\n')
def fn_name(val):
validity_check(val)
target_dict['Product'] = val.strip().capitalize()
...
Каждая функция «обработчик поля» выполняет разные действия и, конечно, хранит разные ключи в target_dict.
Поскольку Python не поддерживает анонимные функции с операторами (или я что-то пропустил?), Функции должны быть написаны отдельно, что делает код менее читабельным и излишне сложным.
Будем благодарны за любые подсказки, как выполнять такие задачи более элегантным и более питоническим образом.
Thx
David