Скажем, у меня есть строка, которая выглядит так:
str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"
Вы заметите много мест в строке, где есть амперсанд, за которым следует символ (например, «&y» и «&c»). Мне нужно заменить эти символы соответствующим значением, которое у меня есть в словаре, например:
dict = {"&y":"\033[0;30m",
"&c":"\033[0;31m",
"&b":"\033[0;32m",
"&Y":"\033[0;33m",
"&u":"\033[0;34m"}
Каков самый быстрый способ сделать это? Я мог бы вручную найти все амперсанды, а затем просмотреть словарь, чтобы изменить их, но это кажется медленным. Выполнение множества замен регулярных выражений также кажется медленным (у меня будет словарь примерно из 30-40 пар в моем реальном коде).
Любые предложения приветствуются, спасибо.
Изменить:
Как было указано в комментариях к этому вопросу, мой словарь определяется до выполнения и никогда не будет меняться в течение жизненного цикла приложения. Это список escape-последовательностей ANSI, в котором будет около 40 элементов. Моя средняя длина строки для сравнения будет около 500 символов, но будут и строки до 5000 символов (хотя это будет редко). Я также использую Python 2.6 в настоящее время.
Редактировать №2 Я принял ответ Tor Valamos как правильный, так как он не только дал правильное решение (хотя это было не лучшее решение), но и принял все остальные во внимание и проделал огромную работу, чтобы сравнить их все. Этот ответ — один из лучших и самых полезных ответов, которые я когда-либо встречал на StackOverflow. Слава вам.