словарь Python может заменить только то, что он находит? - PullRequest
2 голосов
/ 04 ноября 2011

отлично работает следующее:

line = "Hello %(firstname)s %(lastname)s, how are you?"
print line % dict (firstname = "Mike", lastname="Kane")

и отпечатки:

Привет, Майк Кейн, как ты?

Но если у меня нет значения для lastname, я все еще хочу, чтобы это работало:

line = "Hello %(firstname)s %(lastname)s, how are you?"
print line % dict (firstname = "Mike")

Я хочу, чтобы он просто проигнорировал ключ фамилии и напечатал:

Привет, Майк, как ты?

Ответы [ 3 ]

6 голосов
/ 04 ноября 2011

Вы можете использовать defaultdict

from collections import defaultdict

line = "Hello %(firstname)s %(lastname)s, how are you?"
print line % defaultdict(str, firstname = "Mike")

Объяснение: первый аргумент инициализатора defaultdict должен быть вызываемым, который возвращает значение по умолчанию.str вызывается, что возвращает пустую строку (попробуйте str()).

2 голосов
/ 04 ноября 2011

Вы можете использовать make подкласс словаря, который предоставляет значения по умолчанию для пропущенных значений:

>>> class Dict(dict):
        def __missing__(self, key):
            # supply a default value for a given key
            return key


>>> d = Dict(firstname = 'Mike')
>>> print "Hello %(firstname)s %(lastname)s, how are you?" % d
Hello Mike lastname, how are you?

Техника дает вам полный контроль над тем, что возвращается. Вот несколько вариантов:

return '--missing--'       returns a default string
return key.upper()         highlight the missing key
return ''                  return an empty string
1 голос
/ 04 ноября 2011
class MyDict(dict):
    def __missing__(self, key):
        return ""
print("Hello %(firstname)s %(lastname)s, how are you?"
      % MyDict(firstname = "Mike"))

отпечатки

Hello Mike , how are you?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...