본문 바로가기

나 취준생/파이썬

딕셔너리

320x100

artist=['아이유','씨스타','이승기']

music=['좋은날','러빙유','삭제']


- 그냥 떠오르는거 적었는데 왤케 아재같지


위 가수와 노래로 플레이리스트 melon을 만들어보자.





# 딕셔너리 melon을 만들어보기 (노가다)

melon={}

melon['아이유']='좋은날'

melon['씨스타']='러빙유'

melon['이승기']='삭제'


print(melon) # {'아이유': '좋은날', '씨스타': '러빙유', '이승기': '삭제'}



# 딕셔너리 melon 만들기 ( for 문과 zip 활용 )


1
2
3
4
5
6
artist=['아이유','씨스타','이승기']
music=['좋은날','러빙유','삭제']
melon={}
for i, k in zip (artist, music) :
    melon[i]=k
print(melon)





# 리스트의 모든 요소를 인덱스와 쌍으로 추출하기 ( enumerate )


파이썬 내장함수 enumerate() 는 시퀀스 자료형을 인자로 받아

각 요소를 인덱스와 함께 쌍으로 추출할 수 있는

반복가능한 자료인 enumerate 객체를 리턴한다.

enumerate 객체는 주로 for 문과 함께 사용되고, list()를 이용해서 리스트 객체로 변환할 수 있다.


1
2
3
friend=['손흥민','민아','신봉선']
result=list(enumerate(friend))
print(result)




1
2
3
4
friend=['손흥민','민아','신봉선']
result=list(enumerate(friend))
for i, k in result:
    print(i,k)



enumerate가 되면 이처럼 for 문에 i, k를 사용할 수도 있다.



이를 활용하면,


1
2
3
4
artist=['아이유','아이유','씨스타','이승기','이승기']
music=['좋은날','너의이름','러빙유','삭제','누난내여자니까']
for i, k in enumerate(artist):
    print(k,music[i])




이렇게 출력할 수 있다.


근데 이를 만약


{ '아이유' : ['좋은날','너의이름'], '씨스타' : ['러빙유'], '이승기' : ['삭제','누난내여자니까'] }


이렇게 키에 따른 여러 개의 값을 갖도록 만들고 싶으면

그냥

melon={} 해서 만드는 걸로는 불가능하다.


melon={}

melon['아이유']='좋은날'

melon['아이유']='너의이름'

print(melon) # {'아이유': '너의이름'} --> '좋은 날' 사라져버림


그래서 이럴 때는 defaultdict을 이용해야 한다.

defaultdict은 collections 패키지에 있다.


1
2
3
4
5
6
melon={}
from collections import defaultdict
melon=defaultdict(list)
melon['아이유'].append('좋은날')
melon['아이유'].append('너의이름')
print(melon)




그래서 이렇게 일일이 노가다를 할 수도 있다.


1
2
3
4
5
6
7
8
9
melon={}
from collections import defaultdict
melon=defaultdict(list)
melon['아이유'].append('좋은날')
melon['아이유'].append('너의이름')
melon['씨스타'].append('러빙유')
melon['이승기'].append('삭제')
melon['이승기'].append('누난내여자니까')
print(melon)




그치만 지금까지 배운 걸 활용하면 노가다를 하지 않고도 가능하다.


1
2
3
4
5
6
7
8
artist=['아이유','아이유','씨스타','이승기','이승기']
music=['좋은날','너의이름','러빙유','삭제','누난내여자니까']
melon={}
from collections import defaultdict
melon=defaultdict(list)
for i, k in enumerate(artist):
    melon[k].append(music[i])
print(melon)




결과적으로 enumerate는 for 문으로 두 리스트를 동시에 참조할 때

번호를 강제적으로 생성해줘서 for 문 안에 요소를 넣을 위치를 지정할 수 있게 하는 역할을 해준다



그렇다면 노래들만 보고 싶다면 어떻게 해야할까?


* 딕녀서리의 키들을 확인하는 함수 : .keys()

  딕셔너리의 값들을 확인하는 함수 : .values()


이 두 함수를 활용해보자.


1
2
3
4
5
6
7
8
9
10
artist=['아이유','아이유','씨스타','이승기','이승기']
music=['좋은날','너의이름','러빙유','삭제','누난내여자니까']
melon={}
from collections import defaultdict
melon=defaultdict(list)
for i, k in enumerate(artist):
    melon[k].append(music[i])
#print(melon)
print(melon.keys())
print(melon.values())




위처럼 확인할 수는 있지만 원하는 결과값은 아니다.


melon.values() 자체를 for문 안에 넣고 요소를 출력시키자.


1
2
3
4
5
6
7
8
9
10
11
12
artist=['아이유','아이유','씨스타','이승기','이승기']
music=['좋은날','너의이름','러빙유','삭제','누난내여자니까']
melon={}
from collections import defaultdict
melon=defaultdict(list)
for i, k in enumerate(artist):
    melon[k].append(music[i])
#print(melon)
#print(melon.keys())
#print(melon.values())
for i in melon.values():
    print(i)




하면, 리스트의 형태로 출력된 것을 확인할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
artist=['아이유','아이유','씨스타','이승기','이승기']
music=['좋은날','너의이름','러빙유','삭제','누난내여자니까']
melon={}
from collections import defaultdict
melon=defaultdict(list)
for i, k in enumerate(artist):
    melon[k].append(music[i])
#print(melon)
#print(melon.keys())
#print(melon.values())
for i in melon.values():
    for k in i: # ['좋은날','너의이름],['러빙유'],['삭제','누난내여자니까']
        print(k)




마지막으로 한번 더 이렇게 for 문을 한 번 더 돌려주면, 노래 제목만 나오게 할 수 있다!

반응형