Python의 딕셔너리는 키-값 쌍으로 데이터를 관리하는 데 매우 효율적인 자료구조입니다. 그런데 딕셔너리의 키가 일정한 규칙을 따를 때, 정규표현식을 활용하면 특정 조건에 맞는 키만 간편하게 추출할 수 있습니다.
이 글에서는 "PREFIX_원하는값_숫자_SUFFIX"
와 같은 형태의 키를 기준으로 특정 값만 필터링하거나 추출하는 방법을 소개합니다.
1. 문제 예시
아래와 같이 키가 특정 형식을 따르는 딕셔너리가 있다고 가정하겠습니다.
my_dict = {
"KEY_ABC_01_TYPE": "value1",
"KEY_DEF_02_TYPE": "value2",
"KEY_GHI_03_TYPE": "value3",
"OTHER_DATA": "value4"
}
여기서 "KEY_DEF_02_TYPE"
처럼 중간에 "DEF"
라는 값을 포함한 키만 골라내고 싶다고 할 때, 정규표현식을 사용하면 유용합니다.
2. 정규표현식으로 패턴 정의하기
키의 형식은 다음과 같습니다:
KEY_(원하는값)_숫자_TYPE
이를 정규표현식으로 나타내면 다음과 같습니다.
r"KEY_(.*?)_\d+_TYPE"
KEY_
: 접두어(.*?)
: 우리가 추출하고 싶은 중간 값\d+
: 숫자_TYPE
: 접미어
3. 특정 값 하나만 필터링할 경우
원하는 값이 "DEF"
인 경우에만 매칭되도록 하려면 다음과 같이 코드를 작성할 수 있습니다.
import re
desired_value = "DEF"
pattern = re.compile(rf"KEY_{re.escape(desired_value)}_\d+_TYPE")
matching_keys = [key for key in my_dict if pattern.match(key)]
print(matching_keys)
출력 결과
['KEY_DEF_02_TYPE']
4. 여러 값을 동시에 조건으로 넣고 싶을 경우
원하는 값이 "DEF"
또는 "GHI"
인 경우에만 매칭되도록 하려면 다음과 같이 처리할 수 있습니다.
desired_values = ["DEF", "GHI"]
joined = '|'.join(map(re.escape, desired_values)) # 'DEF|GHI'
pattern = re.compile(rf"KEY_({joined})_\d+_TYPE")
matching_keys = [key for key in my_dict if pattern.match(key)]
print(matching_keys)
출력 결과
['KEY_DEF_02_TYPE', 'KEY_GHI_03_TYPE']
5. 원하는 값만 추출하고 싶을 경우
패턴에 맞는 키들에서 중간의 "원하는값"
만 따로 추출하고 싶을 경우 다음과 같이 사용할 수 있습니다.
extracted_values = [
match.group(1)
for key in my_dict
if (match := pattern.match(key))
]
print(extracted_values)
출력 결과
['DEF', 'GHI']
마무리
정규표현식을 활용하면 딕셔너리에서도 키의 형식을 기준으로 조건을 적용하고 필요한 값만 쉽게 추출할 수 있습니다. 특히 키가 "PREFIX_중간값_숫자_SUFFIX"
와 같은 고정된 형식을 갖는 경우, 이런 방식은 매우 강력하고 유연한 도구가 됩니다.
반응형
'개발 (Development) > Python' 카테고리의 다른 글
[Python] requests 요청 후 기다리는 로직과 타임아웃 설정 (0) | 2025.07.28 |
---|---|
[Python] 문자열 2줄 이상인지 확인하는 방법 (0) | 2025.07.28 |
[Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리 (2) | 2025.07.20 |
[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법 (0) | 2025.07.20 |
[Python] JSON 파일을 CSV로 변환 (1) | 2025.06.01 |