Это оптимизируется во время выполнения, как вы просили ... (хотя, скорее всего, не нужно)
Вот простой фрагмент кода, который будет принимать входной словарь команд, сопоставленных с функцией, и в результате будет получен выходной словарь всех недвойственных подкоманд, сопоставленных с одной и той же функцией.
Итак, вы запускаете это, когда запускаете службу, и тогда у вас есть 100% оптимизированный поиск. Я уверен, что есть более умный способ сделать это, так что не стесняйтесь редактировать.
commands = {
'log': log_function,
'exit': exit_function,
'foo': foo_function,
'line': line_function,
}
cmap = {}
kill = set()
for command in commands:
for pos in range(len(1,command)):
subcommand = command[0:pos]
if subcommand in cmap:
kill.add(subcommand)
del(cmap[subcommand])
if subcommand not in kill:
cmap[subcommand] = commands[command]
#cmap now is the following - notice the duplicate prefixes removed?
{
'lo': log_function,
'log': log_function,
'e': exit_function,
'ex': exit_function,
'exi': exit_function,
'exit': exit_function,
'f' : foo_function,
'fo' : foo_function,
'foo' : foo_function,
'li' : line_function,
'lin' : line_function,
'line' : line_function,
}