딕셔너리 컴프리핸션(= 딕셔너리 내포) 역시 유용하다.
리스트나 딕셔너리에 있는 값으로 새로운 딕셔너리를 만들어준다.
단축구문을 이용하므로,
코드가 간결해지고 가독성이 높아진다.
기본 공식은 아래와 같다.
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}
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
[26-4 파이썬] 나토 음성 문자 생성하기 (0) | 2022.09.12 |
---|---|
[26-3 파이썬] 판다스 데이터 프레임 iterrows() (0) | 2022.09.12 |
[26-1 파이썬] 리스트 컴프리핸션 List comprehension (0) | 2022.09.11 |
[25-5 파이썬] read_csv(), to_list(), textinput(title, prompt), while, with as, if break (0) | 2022.09.11 |
[25-4 파이썬] addshape(), onscreenclick(), mainloop() (0) | 2022.09.07 |