Это, безусловно, можно сделать более эффективным. Но, честно говоря, разве это необходимо, если эта функция вызывается сотни раз в секунду или работает на тысячах строк?
Я бы больше хотел прояснить, что происходит ... в настоящее время я далек от понимания этого аспекта.
Просто следите за этим, вход выглядит так:
model.paramName 1 A model.paramValue 1 B model.optimizeParam 1 C model.paramLowerBound 1 D model.paramUpperBound 1 E model.paramName 2 F model.paramValue 2 G model.optimizeParam 2 H модель. Я модель.paramUpperBound 2 J
И ваш желаемый результат выглядит примерно так:
Names = AF
Params = BG
etc...
Теперь, поскольку мои входные данные, конечно, не совпадают с вашими, выходные данные, вероятно, тоже отключены, но я думаю, что у меня есть суть.
Есть несколько моментов. Во-первых, имеет ли значение, сколько параметров передается в функцию? Например, если вход имеет два набора параметров, я хочу просто прочитать оба, или необходимо разрешить функции читать только один? Например, ваш код позволяет мне вызывать parse_params(1,1)
, и он может считывать только те параметры, которые заканчиваются на 1 из того же ввода Если это не является обязательным требованием, вы можете пропустить большую часть кода.
Во-вторых, важно ли ТОЛЬКО читать данные параметры? Если у меня, например, есть параметр с именем 'paramFoo', плохо ли это, если я его читаю? Вы также можете упростить процедуру, просто захватывая все параметры независимо от их имени и извлекая их значение.
def parse_params(input):
parameter_list = {}
param = re.compile(r"model\.([^ ]+) [0-9]+ ([^ ]+)")
each_parameter = param.finditer(input)
for match in each_parameter:
key = match[0]
value = match[1]
if not key in paramter_list:
parameter_list[key] = []
parameter_list[key].append(value)
return parameter_list
В этом случае вывод будет выглядеть примерно так:
{'paramName': [A, F], 'paramValue': [B, G], 'optimizeParam': [C, H] и т. Д ...}
Примечания: Я плохо знаю Python, я парень из Ruby, поэтому мой синтаксис может быть отключен. Извинения.