2011-11-04 13 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は、空の文字列(try str())を返す呼び出し可能です。

+0

十分に単純:ここではいくつかの変種があります。ありがとう – 1qazxsw2

+0

ファクトリ関数が引数を取らないので、これは柔軟な手法ではありません。代わりに\ _ \ _ missing \ _ \ _を使用すると、何が返されるかについての多くのオプションがあります。 –

+1

@RaymondHettinger:trueですが、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? 
関連する問題