키워드 압축 해제 연산자 **
으로 사전의 데이터를 형식화하고 인쇄하려고합니다.키워드 압축 해제로 defaultdict 형식 지정 **
형식 문자열은 많은 키워드를 참조 할 수 있으며 사전에 필요한 모든 키가 없을 수 있습니다. 누락 된 키에 대해서는 'N/A'문자열을 기본값으로 사용하고 싶습니다.
defaultdict
을 사용하여이 기본 문제에 대한 현명한 해결책을 원합니다.
다음은 일반 글꼴 dict
을 사용하는 첫 번째 해결책입니다.
# Cumbersome solution with dict
format_str = '{date} {version} {comment}'
data = dict()
data['date'] = 'today'
data['version'] = 'v1'
data['comment'] = 'N/A' # I want to avoid this
print format_str.format(**data)
# prints: today v1 N/A
누락 된 키에 'N/A'를 명시 적으로 지정하지 않으려합니다.
다음 솔루션은 키워드의 목록을 작성하는 형식 문자열을 정기적 dict
을 사용하여 분석 :
# Another solutions with handmade defaults for missing keys
format_str = '{date} {version} {comment}'
data = dict()
data['date'] = 'today'
data['version'] = 'v1'
import re
for k in re.findall('{(\w+)}', format_str):
if k not in data:
data[k] = 'N/A'
print format_str.format(**data)
# prints: today v1 N/A
형식 문자열의 구문이 훨씬 더 때문에 re.findall
와이 솔루션은 정말 우아하고도 강력하지 않다 이상 {(\w+)}
보다 복잡합니다.
다음 해결책은 명백한 이유로 실패하지 않은 경우 가장 좋아하는 해결책입니다. 여기
# Failed attempt with defaultdict
from collections import defaultdict
format_str = '{date} {version} {comment}'
data = defaultdict(lambda x:'N/A')
data['date'] = 'today'
data['version'] = 'v1'
print format_str.format(**data)
# raises KeyError: 'comment'
문제는 **
가 data
에게 기본 가치를 제공 할 수있는 기회를 제공하지 않습니다 따라서 실제로 data
에 키워드를 압축을 풉니 그래서 format
요청 된 키워드에 대한 data
을 검색하지 않고 있다는 점이다.
해결 방법이 있습니까? 실제로 data.get(kwd)
을 호출하여 N/A
을 얻는 대체 format
함수가 있습니까?
파이썬 3에서, 그들은 당신이 찾고있는 방법을 정확하게 추가했다 : ['str.format_map'] (http://docs.python.org/3 /library/stdtypes.html#str.format_map) – user2357112
당신이 생각하는 것은 http://stackoverflow.com/questions/19799609/leaving-values-blank-if-not-passed-in-str-format/입니다. - 도그의 대답은 예를 들어 공백 ("N/A") 이외의 기본값을 설정할 수도 있습니다 ... –
@ user2357112 format_map을 알았으니 http://stackoverflow.com/questions/17215400/ python-format-string-unused-named-arguments - 파이썬 2와 파이썬 3 모두를 처리합니다. – wap26