2017-10-24 5 views
1

Könnten Sie mir helfen, einen Bezeichnerwert durch einen Wert aus einem Wörterbuch zu ersetzen. So sieht der Code wie folgtErsetzen eines Werts in Zeichenfolge durch einen Wert in einem Wörterbuch in Python

#string holds the value we want to output 
    s = '${1}_p${guid}s_${2}' 
    d = {1: 'bob', 2: '123abc', 3: 'CA', 4: 'smith' } 

ich ersetzen können, will $ {1} mit bob und $ {2} mit 123abc, ich will nur einen Wert ändern, wenn der Wert in $ {} ist nur eine Zahl, dann ersetzen Sie sie durch den Wert im Wörterbuch.

output = 'bob_p${guid}s_123abc' 

Ich habe versucht, Vorlage-Modul, aber es war nicht sub im Wert.

+0

Wo Sie die Zeichenfolge 'S' aus bekommen Sie? Haben Sie die Freiheit zu ändern, wie "s" formatiert ist? – mkrieger1

+0

Können Sie bitte zeigen, was Sie versucht haben und wie es nicht funktioniert hat? – mkrieger1

+0

s stammt aus einer Eigenschaftendatei, die jederzeit bearbeitet werden konnte. – JanDoe2891

Antwort

-2

Sie können die Standardzeichenfolge .format() Methode verwenden. Here ist ein Link zu den Dokumenten mit den relevanten Informationen. Sie könnten das folgende Zitat von der Seite besonders nützlich finden.

"First, thou shalt count to {0}" # References first positional argument 
"Bring me a {}"     # Implicitly references the first positional argument 
"From {} to {}"     # Same as "From {0} to {1}" 
"My quest is {name}"    # References keyword argument 'name' 
"Weight in tons {0.weight}"  # 'weight' attribute of first positional arg 
"Units destroyed: {players[0]}" # First element of keyword argument 'players'. 

Hier wird der Code zur Verwendung des .format() Methode modifiziert basiert.

# string holds the value we want to output 
d = {1: 'bob', 2: '123abc', 3: 'CA', 4: 'smith'} 

s = '' 
try: 
    s = '{0[1]}_p'.format(d) + '${guid}' + 's_{0[2]}'.format(d) 
except KeyError: 
    # Handles the case when the key is not in the given dict. It will keep the sting as blank. You can also put 
    # something else in this section to handle this case. 
    pass 
print s 
0

Versuchen Sie es. Ich weiß also, was ich für jeden Schlüssel im Wörterbuch ersetzen soll. Ich denke, der Code ist selbsterklärend.

s = '${1}_p${guid}s_${2}' 
d = {1: 'bob', 2: '123abc', 3: 'CA', 4: 'smith' } 

for i in d: 
    s = s.replace('${'+str(i)+'}',d[i]) 
print(s) 

Ausgang:

bob_p${guid}s_123abc 
1

Verwenden re.findall die Werte zu erhalten, ersetzt werden.

>>> import re 
>>> to_replace = re.findall('{\d}',s) 
>>> to_replace 
=> ['{1}', '{2}'] 

Nun gehen Sie durch die to_replace Werte und .replace() auszuführen.

>>> for r in to_replace: 
     val = int(r.strip('{}')) 
     try:          #since d[val] may not be present 
       s = s.replace('$'+r, d[val]) 
     except: 
       pass 

>>> s 
=> 'bob_p${guid}s_123abc' 

#driver Werte:

IN : s = '${1}_p${guid}s_${2}' 
IN : d = {1: 'bob', 2: '123abc', 3: 'CA', 4: 'smith' } 
Verwandte Themen