Dire que j'ai une chaîne qui ressemble à ceci:
str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"
Vous remarquerez un grand nombre d'endroits de la chaîne où il y a une esperluette, suivie par un caractère (comme "&y" et "&c"). J'ai besoin de remplacer ces caractères avec une valeur appropriée que j'ai dans un dictionnaire, comme suit:
dict = {"&y":"\033[0;30m",
"&c":"\033[0;31m",
"&b":"\033[0;32m",
"&Y":"\033[0;33m",
"&u":"\033[0;34m"}
Quel est le moyen le plus rapide pour ce faire? J'ai pu trouver manuellement tous les esperluettes, puis la boucle à travers le dictionnaire pour les changer, mais qui semble lent. Faire un tas de regex remplace semble lent (je vais avoir un dictionnaire d'environ 30 à 40 paires dans mon code).
Toutes les suggestions sont appréciés, merci.
Edit:
Comme cela a été souligné dans les commentaires à travers cette question, mon dictionnaire est défini avant l'exécution, et ne changera jamais, au cours du cycle de vie des applications. C'est une liste de séquences d'échappement ANSI, et aura environ 40 éléments. Ma moyenne de la longueur de la chaîne à comparer sera d'environ 500 caractères, mais il y aura ceux qui sont jusqu'à 5000 caractères (même si ce sera rare). Je suis également à l'aide de Python 2.6 actuellement.
Edit #2 J'ai accepté Tor Valamos réponse comme correcte, car il a non seulement donné une solution valable (même si ce n'était pas la meilleure solution), mais a tous les autres en compte et a fait un travail énorme de comparer tous les d'entre eux. La réponse est l'un des meilleurs, la plupart des réponses utiles que j'ai jamais rencontré sur StackOverflow. Bravo à vous.