명명 된 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'}]