파이썬/파이썬(python) 중급

[26-2 파이썬] 딕셔너리 컴프리핸션 dictionary comprehension

Olivia-BlackCherry 2022. 9. 12. 12:34

딕셔너리 컴프리핸션(= 딕셔너리 내포) 역시 유용하다. 

리스트나 딕셔너리에 있는 값으로 새로운 딕셔너리를 만들어준다.

단축구문을 이용하므로, 

코드가 간결해지고 가독성이 높아진다. 

 

 

기본 공식은 아래와 같다.

new_dict = {new_key new_value  for  item  in  list}

{ } : 중괄호를 친다.

new_dict  : 새롭게 만들어질 딕셔너리 이름이다.

new_key new_value 새로운 키, 밸류를 설정할 것이고 이것을 new_dict에 넣을 것이다.

list : 이터러블(반복)하고 시퀀스(순서)가 있는 데이터 모음이다.

item  : list에 있는 것들을 차례대로 꺼냈을 때 각 요소를 말한다. 

import random
name_list = {'Min', 'Hyeon', 'Seung', 'Seok', 'Mong', 'Co', 'Lyeon'}

student_score = {name:random.randint(60,100) for name in name_list}
print(student_score)

{'Mong': 82, 'Hyeon': 98, 'Lyeon': 91, 'Seung': 91, 'Co': 65, 'Min': 67, 'Seok': 67}

 

 

 

이미 존재하는 딕셔너리에 있는 값을 가지고 새로운 딕셔너리를 만들 수도 있다.

new_dict = {new_key:new_value  for  (key, value)  in  dict.items()}
items()

dict.items() : 원래 dict에 있는 요소를 key와 value 값으로 나눈다.

 

(key, value) :  for문을 이용해 dict에 있는 요소 key와 value를 차례로 꺼낸다.

key와 value는 표현식을 거쳐 new_dict의 요소인 new_key:new_value를 만드는데 쓰인다.

 

student_score = {'Mong': 73, 'Hyeon': 77, 'Lyeon': 86, 'Seung': 87, 'Co': 70, 'Min': 62, 'Seok': 87}

new_student_score = {student:score+10 for (student, score) in student_score.items()}
print(new_student_score)

{'Mong': 83, 'Hyeon': 87, 'Lyeon': 96, 'Seung': 97, 'Co': 80, 'Min': 72, 'Seok': 97}

 

 

 

new_dict = {new_key new_value for (key, value) in dict.items() if test}

해당 key, value 중 if 조건문을 통과하는 요소만 new_key, new_value를 만드는데 쓰인다.

student_score = {'Mong': 73, 'Hyeon': 77, 'Lyeon': 86, 'Seung': 87, 'Co': 70, 'Min': 62, 'Seok': 87}

new_student_score = {student:score for (student, score) in student_score.items() if score>80}
print(new_student_score)

{'Lyeon': 86, 'Seung': 87, 'Seok': 87}

 

 

 

<연습문제1>

sentence 문장의 단어, 글자수를 딕셔너리 형태로 출력하기

sentence ="I've found a love for me. Darling, just dive right in, follow my lead."
sentence_list = sentence.split(' ')
word_length = {word:len(word) for word in sentence_list}
print(word_length)
split()

문자열을 쪼개어 리스트로 만들어주는 메소드

괄호 뒤에 쪼개는 기준을 넣는다. 

기본은 띄어쓰기이다. (' ') 

sentence_list = ["I've", 'found', 'a', 'love', 'for', 'me.', 'Darling,', 'just', 'dive', 'right', 'in,', 'follow', 'my', 'lead.']

word_length = {"I've": 4, 'found': 5, 'a': 1, 'love': 4, 'for': 3, 'me.': 3, 'Darling,': 8, 'just': 4, 'dive': 4, 'right': 5, 'in,': 3, 'follow': 6, 'my': 2, 'lead.': 5}

 

 

 

 

<연습문제 2>

월~일요일까지의 섭씨온도를 화씨온도로 바꾸어 딕셔너리 형태로 출력하기

temp = {
    "Mon":14,
    "Tue":15,
    "Wed":20,
    "Sat": 23,
    "Sun": 19
}

f_temp = {day: c_temp*9/5 +32 for (day, c_temp) in temp.items() if c_temp < 20}
print(f_temp)

 

{'Mon': 57.2, 'Tue': 59.0, 'Sun': 66.2}