2017-10-24 17 views
1

識別子値を辞書の値に置き換えることができますか?だから、コードが123ABC、私は唯一の値を変更したいと$ {1}ボブとして$ {2} $ {}内の値はただであれば、私は交換することができるようにしたい文字列の値をPythonの辞書の値に置き換えてください

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

従うようになります。数字を辞書内の値に置き換えます。

output = 'bob_p${guid}s_123abc' 

私はテンプレートモジュールを使用しようとしましたが、その値には含まれませんでした。

+0

? 's'の書式の変更方法は自由ですか? – mkrieger1

+0

あなたは試したこととそれがうまくいかなかったことを教えてください。 – mkrieger1

+0

は、いつでも編集できるプロパティファイルから来ます。 – JanDoe2891

答えて

-2

標準文字列.format()を使用することができます。 Hereは関連情報を持つドキュメントへのリンクです。このページから次の引用を見つけると特に便利です。ここで

"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'. 

.format()方法を使用することに基づいて変更され、あなたのコードです。

# 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

これを試してください。だから、私は辞書の各キーの置き換え先を知っています。私はコードが自明だと思う。

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) 

出力:

bob_p${guid}s_123abc 
1

値を交換するために得るためにre.findallを使用してください。

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

ここでto_replaceの値を調べ、.replace()を実行します。

>>> 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値:あなたがから文字列 `S`を得るのですか

IN : s = '${1}_p${guid}s_${2}' 
IN : d = {1: 'bob', 2: '123abc', 3: 'CA', 4: 'smith' } 
関連する問題