Python 3.6+ форматирование строк из распакованных словарей с отсутствующими ключами - PullRequest
0 голосов
/ 07 декабря 2018

В Python3.4 вы можете сделать следующее:

class MyDict(dict):
    def __missing__(self, key):
        return "{%s}" % key

А затем что-то вроде:

d = MyDict()
d['first_name'] = 'Richard'
print('I am {first_name} {last_name}'.format(**d))

Печать, как и ожидалось:

I am Richard {last_name}

Но этот фрагмент не будет работать в Python3.6 +, возвращая KeyError при попытке получить значение last_name из словаря, есть ли обходной путь для форматирования этой строки, чтобы работать так же, как в Python3.4?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

В Python 3.6+ вы можете использовать форматированные строковые литералы ( PEP 498 ):

class MyDict(dict):
    def __missing__(self, key):
        return f'{{{key}}}'

d = MyDict()
d['first_name'] = 'Richard'

print(f"I am {d['first_name']} {d['last_name']}")

# I am Richard {last_name}
0 голосов
/ 07 декабря 2018

Я решил, используя format_map вместо format, следуя моему примеру:

print('I am {first_name} {last_name}'.format_map(d))

Напечатано

I am Richard {last_name}

Как и ожидалось.

...