Python のstr.format(key=value)
構文を使用して特定のキーのみを置き換えることは可能ですか。
次の例を検討してください。
my_string = 'Hello {name}, my name is {my_name}!'
my_string = my_string.format(name='minerz029')
返す
KeyError: 'my_name'
これを達成する方法はありますか?
Python のstr.format(key=value)
構文を使用して特定のキーのみを置き換えることは可能ですか。
次の例を検討してください。
my_string = 'Hello {name}, my name is {my_name}!'
my_string = my_string.format(name='minerz029')
返す
KeyError: 'my_name'
これを達成する方法はありますか?
my_name
このように、二重中括弧を使用してエスケープできます
>>> my_string = 'Hello {name}, my name is {{my_name}}!'
>>> my_string.format(name='minerz029')
'Hello minerz029, my name is {my_name}!'
ご覧のとおり、一度フォーマットすると、外側{}
が削除されて に{{my_name}}
なり{my_name}
ます。後でフォーマットしたい場合はmy_name
、次のようにもう一度フォーマットするだけです
>>> my_string = 'Hello {name}, my name is {{my_name}}!'
>>> my_string = my_string.format(name='minerz029')
>>> my_string
'Hello minerz029, my name is {my_name}!'
>>> my_string.format(my_name='minerz029')
'Hello minerz029, my name is minerz029!'
Python3.2+にはformat_map
、これを可能にするものがあります
>>> class D(dict):
... def __missing__(self, k):return '{'+k+'}'
...
>>> my_string = 'Hello {name}, my name is {my_name}!'
>>> my_string.format_map(D(name='minerz029'))
'Hello minerz029, my name is {my_name}!'
>>> _.format_map(D(my_name='minerz029'))
'Hello minerz029, my name is minerz029!'
extra を追加する必要はありません。指定{}
したキーのみD
が置き換えられます。
@stevehaが指摘しているように、古いPython3を使用している場合でも引き続き使用できます
my_string.format(**D(name='minerz029'))