명명 된 Python 문자열 형식에서 사용 가능한 변수 찾기 [중복]

Dec 13 2020

템플릿 / 서식 문자열이 주어지면 "{foo}_{bar}"필요한 서식 키를 프로그래밍 방식으로 추출하려면 어떻게해야 ["foo", "bar"]합니까?

다양한 실험에 대한 매개 변수 사전이 있습니다.

[
    {"parameters": {"foo": 1, "bar": 2}, "format": `"{foo}_{bar}"`},
    {"parameters": {"biz": 3}, "format": "{biz}_{baz}"}
]

보시다시피 두 번째 매개 변수 세트에는 키가 없습니다 baz. 그래서 내가 뭔가를 할 때

"{biz}_{baz}".format(**parameters), baz누락 되었기 때문에 KeyError가 발생합니다 .

누락 된NR 모든 매개 변수 를로 바꾸고 사용 가능한 모든 매개 변수를 해당 값으로 채우고 싶습니다 .

출력은 다음과 같습니다.

[
    {"parameters": {"foo": 1, "bar": 2}, "format": `"{foo}_{bar}"`, "formatted": "1_2"},
    {"parameters": {"biz": 3}, "format": "{biz}_{baz}", "formatted": "3_NR"}
]

컨텍스트 : 해당 문자열에 필요한 예상 매개 변수 간에 일관성이없는 100 개 이상의 문자열이 있습니다.

답변

2 BramVanroy Dec 13 2020 at 21:51

문자열에서 필요한 매개 변수 이름을 효율적으로 수집 한 다음 실제 키간에 설정된 유사성을 확인하여 누락 된 키가 있는지 확인할 수 있습니다. 누락 된 키가있는 경우 "NR"값으로 추가합니다. 마지막으로를 사용 .format하여 문자열을 "형식화 된"키로 올바르게 형식화하십시오.

ds = [
    {"parameters": {"foo": 1, "bar": 2}, "format": "{foo}_{bar}"},
    {"parameters": {"biz": 3}, "format": "{biz}_{baz}"}
]

for d in ds:
    # Copy params so that we do not change params in-place
    params = d["parameters"]
    req_keys = set(d["format"][1:-1].split("}_{"))
    missing_keys = req_keys.difference(params.keys())

    if len(missing_keys) > 0:
        params = {**params, **{key: "NR" for key in missing_keys}}

    d["formatted"] = d["format"].format(**params)

print(ds)

# [{'parameters': {'foo': 1, 'bar': 2}, 'format': '{foo}_{bar}', 'formatted': '1_2'}, {'parameters': {'biz': 3}, 'format': '{biz}_{baz}', 'formatted': '3_NR'}]