6

Python のstr.format(key=value)構文を使用して特定のキーのみを置き換えることは可能ですか。

次の例を検討してください。

my_string = 'Hello {name}, my name is {my_name}!'

my_string = my_string.format(name='minerz029')

返す

KeyError: 'my_name'

これを達成する方法はありますか?

4

3 に答える 3

15

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!'
于 2013-10-29T04:03:07.123 に答える
6

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'))
于 2013-10-29T04:10:30.713 に答える