2011-11-04 4 views
2

다음 작품 잘 :파이썬 사전은 찾은 것만 바꿀 수 있습니까?

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

: 나는 lastname에 대한 값이없는 경우

는하지만, 난 여전히 일이 원하는 안녕 마이크, 잘 지냈니?

답변

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 : 사실,하지만 그건 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? 
관련 문제