문자열에서 각 단어의 첫 글자를 키로, 그 문자로 시작하는 단어 자체를 값으로 하는 딕셔너리를 만들어야 하는 경우가 있습니다. 이럴 때 파이썬에서는 split() 메서드와 딕셔너리, 그리고 간단한 if 조건문을 활용하면 손쉽게 구현할 수 있습니다.
예제 코드
아래는 전체 구현 예시입니다.
my_string = input("문자열을 입력하세요 : ")
split_string = my_string.split()
my_dict = {}
for elem in split_string:
if elem[0] not in my_dict.keys():
my_dict[elem[0]] = []
my_dict[elem[0]].append(elem)
else:
if elem not in my_dict[elem[0]]:
my_dict[elem[0]].append(elem)
print("생성된 딕셔너리는 다음과 같습니다")
for k, v in my_dict.items():
print(k, ":", v)실행 결과
문자열을 입력하세요 : Hey Jane, how are you 생성된 딕셔너리는 다음과 같습니다 H : ['Hey'] J : ['Jane,'] h : ['how'] a : ['are'] y : ['you']
코드 설명
- 사용자로부터 문자열을 입력받아 변수에 저장합니다.
split()메서드를 사용해 문자열을 공백 기준으로 나누고, 그 결과를 별도의 변수에 할당합니다.- 값을 저장할 빈 딕셔너리를 하나 생성합니다.
- 분리된 단어들을 순회하면서, 해당 단어의 첫 글자가 딕셔너리의 키로 존재하지 않으면 새 키를 만들고 빈 리스트를 값으로 지정한 뒤 단어를 추가합니다.
- 첫 글자가 이미 키로 존재하는 경우에는, 같은 단어가 중복되지 않는다면 기존 리스트에 바로 추가(append)합니다.
- 모든 단어에 대한 처리가 끝나면 완성된 딕셔너리를 콘솔에 출력합니다.
참고: 더 간결한 방법
위 코드는 dict.setdefault() 메서드를 사용하면 더욱 간결하게 작성할 수 있습니다.
my_string = input("문자열을 입력하세요 : ")
my_dict = {}
for word in my_string.split():
my_dict.setdefault(word[0], []).append(word)
print(my_dict)setdefault(키, 기본값)은 해당 키가 딕셔너리에 없으면 기본값(여기서는 빈 리스트)을 설정하고 반환해 주므로, 조건문 없이 한 줄로 처리할 수 있다는 장점이 있습니다. 대소문자를 구분하지 않으려면 word[0].lower()처럼 첫 글자를 소문자로 변환한 뒤 키로 사용하면 됩니다.