All about

제가 공부하면서 햇갈리는 것들을 정리하고자 글을 씁니다. 잘못된 내용이 있다면 지적 부탁드립니다.

컴프리헨션이 무엇인지는 이전 글인 리스트 컴프리헨션 에 설명되어 있습니다. 


딕셔너리 컴프리헨션은 딕셔너리의 key 와 value 를 모두 선언해줘야 합니다.


alphabets = ['a','b','c','d','e']

for my_index, my_element in enumerate(alphabets):
print('index is {} and element is {}'.format(my_index, my_element))

new_alphabets = { new_index : new_element for new_index, new_element in enumerate(alphabets)}
#위 코드는 아래 주석문과 같은 구조라고 생각 할 수 있습니다.
#dict = { key : value for key, value in enumerate(something)}

print(new_alphabets)


실행결과



enumerate() 함수는 리스트의 index와 element 를 return 하는 함수입니다. 첫번째 조건문에서 이를 위한 예시를 보였습니다.

두번째 코드에선 new_alphabets 딕셔너리를 선언할 때 enumerate() 함수로 조건제시법을 사용했습니다. 


여러개의 리스트를 이용해서 딕셔너리 컴프리헨션을 사용할 수도 있습니다. 첫번째 리스트의 element 를 딕셔너리의 key 로, 두번째 리스트의 element 를 딕셔너리의 value 로 하는 경우의 잘못된 예시와 잘 된 예시를 함께 작성했습니다.


numbers = {x:y for x in range(10) for y in range(10)}
print(numbers)

new_numbers={}
for x in range(10):
for y in range(10):
new_numbers[x]=y

a = [i for i in range(10)]
b = [i for i in range(10)]

c = {i:j for i, j in zip(a, b)}

print(c)


실행결과



처음 선언한 numbers 의 경우 중첩 for 문을 사용하여 작성하였는데, 출력해보면 value 가 모두 '9' 입니다. numbers 에 선언된 조건제시법을 for 문의 형태로 풀어서 작성하면 바로 아래의 new_numbers 에 값을 집어넣는 경우와 같습니다. 이 경우엔 x =1 일 때, y = 1~9 까지 차례로 입력되다가, (x =1, y =9) 일 때 x =2 가 되기 때문에 결국 모든 value 는 9가 됩니다(저와 똑같은 멍청한 실수를 하지 마시라고 적어둡니다).


아래 c 를 선언한 것 같이 튜플을 반환하는 함수인 zip() 을 이용하여 리스트 a 와 b 의 element 를 각각 딕셔너리의 key 와 value 로 하여 c 를 선언할 수 있었습니다.



공유하기

facebook twitter kakaoTalk kakaostory naver band
loading