파이썬 프로그래밍을 하다 보면 문자열 리스트 안의 각 문자가 몇 번째 요소(인덱스)에 나타나는지 확인해야 하는 경우가 있습니다. 이런 문제는 단순한 반복문과 defaultdict, 그리고 add 메서드만으로도 손쉽게 해결할 수 있습니다.
예제 코드
다음은 문자열 리스트의 각 문자를 해당 인덱스와 매핑하는 과정을 보여주는 예제입니다.
from collections import defaultdict
my_list = ['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']
print("The list is :")
print(my_list)
my_result = defaultdict(set)
for index, element in enumerate(my_list):
for sub in element.split():
my_result[sub].add(index + 1)
my_result = {key: list(val) for key, val in my_result.items()}
print("The result is :")
print(my_result)
실행 결과
The list is :
['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']
The result is :
{'p': [1], 'y': [1], 't': [1, 4], 'h': [1], 'o': [1, 4], 'n': [1, 3, 5], 'i': [2], 's': [2], 'f': [3], 'u': [3], 'l': [5], 'e': [5], 'a': [5], 'r': [5]}
코드 상세 설명
모듈 임포트:
collections모듈에서defaultdict를 불러옵니다. 일반 딕셔너리와 달리 존재하지 않는 키에 접근해도 오류 없이 기본값(여기서는 빈 집합)이 자동으로 생성됩니다.리스트 정의 및 출력: 공백으로 구분된 문자들로 이루어진 문자열 5개를 담은 리스트를 만들고 콘솔에 출력합니다.
빈 딕셔너리 생성:
defaultdict(set)을 사용해 값이 집합(set) 형태인 딕셔너리를 초기화합니다.반복 처리:
enumerate함수로 리스트를 순회하면서 각 요소의 인덱스와 값을 동시에 얻습니다.문자 분리 및 저장:
split메서드로 각 문자열을 개별 문자로 분리한 뒤,add메서드를 통해 해당 문자가 등장한 위치(인덱스 + 1)를 집합에 추가합니다. 인덱스에 1을 더하면 사람이 읽기 편한 1부터 시작하는 번호가 됩니다.딕셔너리 컴프리헨션: 집합 형태의 값을 다시 리스트로 변환하여 최종 결과 딕셔너리를 완성합니다.
결과 출력: 완성된 매핑 결과를 콘솔에 출력합니다.
정리
이처럼 defaultdict와 enumerate를 조합하면 별도의 조건 검사 없이도 깔끔하게 문자-인덱스 매핑을 구현할 수 있습니다. 집합을 사용하기 때문에 중복 인덱스가 자동으로 제거되며, 텍스트 전처리나 데이터 분석 작업에서 유용하게 활용할 수 있습니다.