본문 바로가기

프로그래밍

[Python] 딕셔너리에서 value로 key값 가져오는 법

딕셔너리 자료형을 사용할 경우, 보통 key값을 이용해 value를 가져오게 된다.

 

아래는 key값으로 모스부호, value값으로 알파벳이 저장된 딕셔너리를 이용해

모스부호를 해독하는 코드이다.

letter='.... . .-.. .-.. ---'

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'}
    
    arr = letter.split(' ')	#입력된 모스부호 문자열을 공백으로 구분
    answer = ''
    
    for s in arr:			#각 모스부호에 대응하는 알파벳 찾기
        answer+=morse[s]
        
    print(answer)

이 코드를 실행하면, 모스 부호로 작성된  '.... . .-.. .-.. ---' 을 key값으로 사용하여 

각 key에 대응하는 value값인 'hello'가 출력된다.

 

그런데 가끔 value를 사용해 key값을 구해주고 싶을 때가 있을 수 있다.

이 경우 아래와 같은 2가지 방법을 사용할 수 있겠다.

 

1. 딕셔너리의 key값과 value값을 뒤집기

letter = 'hello'

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'}
    
morse_reverse = {}

for i, j in morse.items():			#딕셔너리의 key와 value 뒤집어주기
	morse_reverse[j] = i
    
answer=[]

for s in letter:
	answer.append(morse_reverse[s])
    
print(' '.join(answer))

 

위와 같이 key와 value의 위치를 바꾸어준 딕셔너리를 새로 만들어 활용할 수 있다.

실행 결과는 'hello'를 모스 부호로 대치한 '.... . .-.. .-.. ---' 이 된다.

 

 

2. key값과 value값의 index를 활용해서 구하기

letter = 'hello'
morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'}
 
answer=[]

for s in letter:
	answer.append(list(morse.keys())[list(morse.values()).index(s)])
    
print(' '.join(answer))

 

key와 value를 각각 리스트에 저장하고,  value의 인덱스를 이용해 역으로 key값을 매치시켜 구한다.

실행 결과는 1번 코드와 같다.