Eine Liste von String-Ersetzungen in Python

Gibt es einen weit kürzeren Weg, um den folgenden Code zu schreiben?

my_string = my_string.replace('A', '1') my_string = my_string.replace('B', '2') my_string = my_string.replace('C', '3') my_string = my_string.replace('D', '4') my_string = my_string.replace('E', '5') 

Beachten Sie, dass ich diese exakten Werte nicht benötige. Ich bin einfach auf der Suche nach einem Weg, um 5 + Zeilen in weniger als 5 zu drehen

6 Solutions collect form web for “Eine Liste von String-Ersetzungen in Python”

Sieht aus wie eine gute Gelegenheit, eine Schleife zu benutzen:

 mapping = { 'A':'1', 'B':'2', 'C':'3', 'D':'4', 'E':'5'} for k, v in mapping.iteritems(): my_string = my_string.replace(k, v) 

Ein schneller Ansatz, wenn es Ihnen nichts ausmacht, die Klammern wäre:

 mapping = [ ('A', '1'), ('B', '2'), ('C', '3'), ('D', '4'), ('E', '5') ] for k, v in mapping: my_string = my_string.replace(k, v) 

Sie können ganz einfach string.maketrans () verwenden, um den Zuordnungsstring zu erstellen, der an str.translate () übergeben wird:

 import string trans = string.maketrans("ABCDE","12345") my_string = my_string.translate(trans) 

Schauen Sie auch in str.translate() . Es ersetzt Zeichen nach einer Zuordnung, die Sie für Unicode-Strings zur Verfügung stellen, oder auf andere Weise muss gesagt werden, was jedes Zeichen von chr (0) bis chr (255) mit ersetzen soll.

Wenn du die falsche Antwort bekommen willst, dann benutze string.replace in einer Schleife. (Obwohl es in diesem Fall keine Überschneidung zwischen den Mustern und Ersatz funktioniert).

Für den allgemeinen Fall mit möglichen Überschneidungen oder einem langen Themenstring verwenden Sie re.sub:

 import re def multisub(subs, subject): "Simultaneously perform all substitutions on the subject string." pattern = '|'.join('(%s)' % re.escape(p) for p, s in subs) substs = [s for p, s in subs] replace = lambda m: substs[m.lastindex - 1] return re.sub(pattern, replace, subject) >>> multisub([('hi', 'bye'), ('bye', 'hi')], 'hi and bye') 'bye and hi' 

Für den Spezialfall von 1-stelligen Mustern und 1- oder 0-Zeichen-Ersetzungen verwenden Sie string.maketrans.

  A): '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'       
 Für Schlüssel, Ersatz in replaceDict.items ():  
   My_string = my_string.replace (Schlüssel, Ersatz) 

Eine Möglichkeit, die ich tue, ist mit einem zugehörigen Array (ein Wörterbuch). Hier ist ein Beispiel für die Ersetzungen, die ich benutze, wenn ich eine Datei bereit für die Bereitstellung in LaTeX mit regulären Ausdrücken.

  import re def escapeTexString(string): # Returns TeX-friendly string rep = { # define desired replacements in this dictionary (mapping) '&': '\\&', '%': '\\%', '#': '\\#', '_': '\\_', '{': '\\{', # REGEX Special '}': '\\}', # REGEX Special '~': '\\char"007E{}', # LaTeX Special '$': '\\$', # REGEX Special '\\': '\\char"005C{}', # REGEX/LaTeX Special '^': '\\char"005E{}', # REGEX/LaTeX Special '"': '\\char"FF02{}' } # use these two lines to do the replacement (could be shortened to one line) pattern = re.compile("|".join(map(re.escape,rep.keys()))) # Create single pattern object (key to simultaneous replacement) new_string = pattern.sub(lambda match: rep[match.group(0)], string) return new_string 
  • Wie kann man ein Histogramm aus einer Liste von Strings in Python machen?
  • Python-Partition und Split
  • F.read kommt leer
  • Spalten von Buchstaben aus Zahlen innerhalb eines Strings
  • Python csv string zu array
  • Python-Split-String in mehrere Zeichenfolge
  • Titel, der einen String mit Ausnahmen behandelt
  • Finden Sie alle Vorkommen eines Zeichens in einer Zeichenfolge
  • Äquivalent von R's Paste Befehl für Vektor von Zahlen in Python
  • Wort durch ein anderes Wort aus der Zeichenkette in Python ersetzen
  • Konvertieren Sie eine Liste von Zeichen in einen String
  • Python ist die beste Programmiersprache der Welt.