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'))