2011-11-04 16 views
2

下正常工作:python字典能替換它發現的東西嗎?

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

我希望它只是忽略姓鍵和打印:

邁克,你好嗎?

回答

6

您可以使用defaultdict

from collections import defaultdict 

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

說明:第一個參數defaultdict初始化必須是返回默認值的調用。 str可調用,返回一個空字符串(嘗試str())。

+0

簡單。謝謝 – 1qazxsw2

+0

這不是一種靈活的技術,因爲工廠函數不會帶參數。如果您使用\ _ \ _ missing \ _ \ _,那麼可以返回多少選項。 –

+1

@RaymondHettinger:是的,但這不在OP的規範中。 –

2

您可以使用作出這樣的遺漏值提供默認字典的一個子類:

>>> 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
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?