Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 문자열을 딕셔너리로 변환하는 방법


이 글에서는 아래의 문제 상황에 대한 해결 방법을 알아봅니다.

문제 정의 − 하나의 문자열이 입력으로 주어졌을 때, 이를 파이썬의 딕셔너리(dict) 자료형으로 변환해야 합니다.

여기서는 두 가지 방법을 통해 이 문제를 해결하는 과정을 살펴보겠습니다.

방법 1 − eval() 함수 사용하기

eval() 함수는 문자열의 형태가 실제 딕셔너리 리터럴과 동일한 구조를 가질 때 사용할 수 있습니다. 이 경우 문자열을 별도의 가공 없이 곧바로 딕셔너리로 변환할 수 있습니다.

⚠️ 주의: eval()은 문자열에 담긴 코드를 그대로 실행하므로, 신뢰할 수 없는 외부 입력에는 절대 사용해서는 안 됩니다. 보안이 중요한 환경에서는 ast.literal_eval()을 사용하는 것이 좋습니다.

예제

# 딕셔너리 형태를 한 문자열
string = "{'T':1, 'U':2, 'T':3, 'O':4, 'R':5}"
# eval() 함수로 변환
dict_string = eval(string)
print(dict_string)
print(dict_string['T'])

출력 결과

{'T': 3, 'U': 2, 'O': 4, 'R': 5}
3

위 예제에서 키 'T'가 두 번 등장했지만, 딕셔너리는 중복된 키를 허용하지 않기 때문에 나중에 나온 값인 3으로 덮어쓰여진 것을 확인할 수 있습니다.

방법 2 − 제너레이터 표현식 사용하기

문자열이 "키-값" 형태의 쌍으로 이루어져 있다면, split() 메서드와 제너레이터 표현식을 조합하여 딕셔너리로 변환할 수 있습니다. 이 방법은 구분자나 형식을 직접 제어할 수 있어 더 유연하게 활용할 수 있다는 장점이 있습니다.

예제

string = "T-3 , U-2 , T-1 , O-4 , R-5"
# 문자열을 딕셔너리로 변환
dict_string = dict((x.strip(), y.strip()) for x, y in
(element.split('-') for element in string.split(', ')))
print(dict_string)
print(dict_string['T'])

출력 결과

{'T': '1', 'U': '2', 'O': '4', 'R': '5'}
1

이 방법에서는 값이 숫자가 아니라 문자열('1', '2' 등)로 저장된다는 점에 유의하세요. 값을 숫자로 사용하려면 int(y.strip())처럼 형 변환을 추가하면 됩니다.

결론

이 글에서는 문자열을 딕셔너리로 변환하는 두 가지 방법을 살펴보았습니다. 문자열이 이미 딕셔너리 리터럴 형태라면 eval()로 간단히 처리할 수 있고, 그렇지 않다면 split()과 제너레이터 표현식을 조합해 원하는 형식에 맞게 변환할 수 있습니다. 상황에 맞는 방법을 선택해 활용해 보시기 바랍니다.