■ 123. 사전에 요소 추가하기
예제:
sol={}
sol['태양']='sun'
↑ ↑
key value
print(sol)
소녀시대: 소원을 말해봐, Gee, oh!
비틀즈 : Let it be, Yesterday, Hey jude, imagine
↑ ↑
키 값들
sol={}
solar1=[태양]
solar2=[sun]
sol[solar1]=solar2
print(sol)
↑
이거 안됨. 리스트자료는 딕셔너리 못시킴.
문제311. 아래의 두개의 리스트를 이용해서 아래의 딕셔너리를
생성하시오! (enumerate를 사용하세요~)
val3={}
for i,k in enumerate(solar1): # i 는 인덱스번호, k는 solar1 이름들
val=solar2[i]
val3[k]=val
print(val3)
문제312.(카카오 딥러닝 파트 알고리즘 문제)
아래의 두개의 리스트를 아래의 딕셔너리 출력하시오!
artist=['Beatles', '소녀시대']
music=['Yesterday', '소원을 말해봐']
결과:
{'Beatles':'Yesterday', '소녀시대':'소원을 말해봐'}
artist=['Beatles', '소녀시대']
music=['Yesterday', '소원을 말해봐']
val3={}
for i,k in enumerate(artist):
val=music[i]
val3[k]=val
print(val3)
↓
■ 좀 더 간단하게 구현하는 방법★
artist=['Beatles', '소녀시대']
music=['Yesterday', '소원을 말해봐']
box={}
for ar, mu in zip(artist,music):
box[ar]=mu
print(box)
■ defaltdict 이 무엇인지?
"defaultdict() 은 말 그대로 dictionary 의 기본값을 정의하고
값이 없더라도 에러를 출력하지 않고 기본값을 출력한다"
예제:
d={}
d['one']='a'
print(d)
결과 : {'one' : 'a'}
설명: 딕셔너리를 구성하려면 위와 같이 키와 값 두개가 동시에 필요하다.
위의 코드를 다시 수행하는데 아래와 같이 해보시오.
d={}
d['one']
print(d)
그런데 defaultdict() 를 사용하면 키만 생성하고 값이 없어도
에러가 나지 않는다.
예제:
from collections import defaultdict
d3=defaultdict(list)
d3['one']
d3['two']
print(d3)
***값이 미지정 이더라도, 일단 비워놓고 출력하게 해주는게 defaultdict() 이다.
문제313.
아래의 두개의 리스트로 아래의 딕셔너리를 생성하시오
(defaultdict 를 이용하시오)
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
힌트: enumerate
결과:
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
from collections import defaultdict
d1={}
box=defaultdict(list)
for i,arti in enumerate(artist):
box[arti].append(music[i])
print(box)
||
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
from collections import defaultdict
var3=defaultdict(list) #var3={} 인데 딕 디폴트값 리스트처리
for a,b in zip(artist,music):
var3[a].append(b)
print(var3)
※ 설명:
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
0 1 2 3
i arti
0 Beatles box['Beatles'].append(?)
1 Beatles box['Beatles'].append(?)
2 소녀시대 box['소녀시대'].append(?)
3 소녀시대 box['소녀시대'].append(?)
문제314.
오늘 배운 shuffle 을 이용해서 수행될 때 마다
box 딕셔너리의 요소들이 shuffle 되게 하시오!
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
from random import shuffle
from collections import defaultdict
d1={}
box=defaultdict(list)
for i,arti in enumerate(artist):
box[arti].append(music[i])
shuffle(box[arti]) #box[arti] 값은 리스트에 담긴 노래들
print(box)
문제315.(오늘의 마지막 문제)
k사의 경력파트 알고리즘 문제를 해결하시오
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
결과:
소원을 말해봐 Let it be Gee Yesterday
>>수행할 때 마다 결과가 달라져야하는데 동일한 아티스트끼리 인접하면
안된다.
힌트:
딕셔너리에서 값만 갖고 오는거 box.vaules()
답:
from random import shuffle
from collections import defaultdict
artist = ['Beatles', 'Beatles', '소녀시대', '소녀시대']
music = ['Yesterday', 'let it be', '소원을 말해봐', 'Gee']
box=defaultdict(list)
for i,a in enumerate(artist):
box[a].append(music[i])
print(box[a])
#shuffle(box[a])
song=list(box.values())
print(song)
shuffle(song) #돌릴때마다 song 값도 shuffle 시킨다.
for x in range(len(song)): #song이 한줄이니까, 숫자로 뽑기하면 됨
for j in range(len(song)):
print(song[j][x],end=' ')
오답이지만
과정 참고:
artist=['Beatles','Beatles', '소녀시대','소녀시대']
music=['Yesterday','let it be', '소원을 말해봐', 'Gee']
from random import shuffle
from collections import defaultdict
box=defaultdict(list) #box={} 이건데, 밸류값을 디폴트로 해주겠다.
for i,a in enumerate(artist):
box[a].append(music[i]) #이 과정이 사실 box[a]=music[i] 인데,
#그렇게 하면 값이 하나만 들어가니까, append로 한다.
#print(box) #box 는 딕으로->> {key:[], key2:[]} 처리되어 있다.
#print(box.values()) #values() 로 감싸져 있다.(괄호 씌워짐)
songs=list(box.values()) #리스트화 하면서, ()튜플을 없애준다.
#print(songs)
#print(len(songs)) #2
x=[]
for i in songs:
for j in range(len(songs)): #0,1
x.append(i[j])
print(x)
(x[len(x)-1],x[len(x)-len(x)]) = (x[len(x)-len(x)],x[len(x)-1])
print(x)
for z in x:
print(z, end=' ')
문제316.
아래의 2개의 리스트를 아래의 결과로 나오게 하시오
solar1=['태양','수성','금성','지구','화성','소행성','목성','토성','천왕성','해왕성']
solar2=['Sun','Mercury','Venus','Earth','Mars','Jupiter','Saturn','Urauns','Neptune']
solar1=['태양','수성','금성','지구','화성','목성','토성','천왕성','해왕성']
solar2=['Sun','Mercury','Venus','Earth','Mars','Jupiter','Saturn','Urauns','Neptune']
a=[]
for i, name in enumerate(solar1):
a.append(name)
a.append(solar2[i])
#print(a)
for j in a:
print(j,end=', ')
||
solar1=['태양','수성','금성','지구','화성','목성','토성','천왕성','해왕성']
solar2=['Sun','Mercury','Venus','Earth','Mars','Jupiter','Saturn','Urauns','Neptune']
a=[]
for i,name in zip(solar1,solar2):
print(i,',',name,end=' , ')
■ 124. 사전의 특정 요소값 변경하기
문제317.
아래의 딕셔너리의 값중에서 let it be 를 Women 으로 변경하시오
(의외로 안 풀려서 놀랐음)
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a['Beatles'][1]='Women'
print(dic)
■ 125. 사전의 특정 요소 제거하기
문제318.
아래의 딕셔너리에서 소녀시대의 키와 값을 전부 지우시오
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
del a['소녀시대']
print(a)
부분지우고 싶으면
del a['소녀시대'][1]
■ 126. 사전의 모든 요소 제거하기
문제319.
아래의 리스트에 모든 요소를 다 삭제하시오
(clear 함수 써서)
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a.clear()
print(a)
결과: {}
또는 그냥 변수초기화ㅋㅋㅋ
a={}
※ del 은 요소 지정해서 지우고, clear 는 한번에 전부 지움.
■ 127. 사전에서 키만 추출하기
문제320.
아래의 딕셔너리에서 key 에 해당하는 부분만 추출하시오
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
print(a.keys())
||
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
for i in a.keys():
print(i,end=' ')
**딕셔너리를 enumerate 하면,
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
for i, name in enumerate(a):
print(i,name)
인덱스랑 키값만 출력된다
조인이 for 문 안에 있으면 꽤나 특이해짐
for i, name in enumerate(a):
print(name)
x=','
print(x.join(name))
딕셔너리, 리스트 상관없이
저렇게 다 쪼개서 뽑음.
***만약
end 를 콤마로 쓰면, 맨 뒤에 콤마가 나온다.
안나오게 하려면?
1. join
2. list[ :]
3. strip
1. join
solar1=['태양','수성','금성','지구','화성','목성','토성','천왕성','해왕성']
solar2=['Sun','Mercury','Venus','Earth','Mars','Jupiter','Saturn','Urauns','Neptune']
a=[]
for i,name in zip(solar1,solar2):
x=','
a.append(i)
a.append(name)
print(x.join(a)) #join 은 각 값 사이에만 들어감 !
2. list[: ]
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
pr_dic = '' #빈 공간
for i in dic.keys():
pr_dic += i + ', ' #공백있음
#print(pr_dic)
print(pr_dic[:-2]) #맨뒤가 , 니까 그 바로 앞까지만 뽑으라는 것.
3. strip
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
pr_dic = ''
for i in dic.keys():
pr_dic += i + ',' #여기서 공백한칸 줄이고
#print(pr_dic)
print(pr_dic.rstrip(',')) # rstrip 처리
그냥 strip 했는데 맨 뒤 콤마만 잘라졌음.
■ 128. 사전에서 값만 추출하기
문제321.
아래의 딕셔너리에서 값만 추출 하시오!(values)
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
--------
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
print(dic.values())
||
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
#print(dic.values())
var='' #로 했더니 리스트끼리는 사슬처럼 엮지 못한다고 한다.
for i in dic.values():
print(i)
#그래서 list 벗기려고 for문 한번 더 돌려야 한다.
for j in i:
#print(j) 이제 밸류값이 하나씩 나온다.
var+=j+', '
print(var)
콤마까지 없애려면
a={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
b=''
for i in a.values():
for j in i:
b+=j+', '
print(b.rstrip(', ')) #rstrip 할 때, 콤마랑 스페이스공간도 같이 해줘야 한다.
문제322.
아래의 딕셔너리에서 아래의 값만 추출하시오
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
values의 첫번째 값들만 출력하시오
---------------------------------
for i in dic.values():
print(i[0],end=',')
||
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
box=list(dic.values()) #리스트에 담아서 뽑는 방법
print(box)
print(box[0][0],',',box[1][0])
문제323.
아래의 딕셔너리에서 아래의 값들을 추출하시오
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
values의 모든 값들을 하나의 row에 콤마로 정렬하여 출력하시오
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a=list(dic.values())
print(a)
print(len(a))
for i in range(len(a)+1): #0,1,2
for j in range(len(a)): #0,1
print(a[j][i],end=',')
***컴마 없애려면
dic={'Beatles':['Yesterday','let it be','Hey Jude'], '소녀시대':['소원을 말해봐','Gee','다만세']}
a=list(dic.values())
#print(a)
b=[]
x=', '
#print(len(a))
for i in range(len(a)+1): #0,1,2
for j in range(len(a)): #0,1
b.append(a[j][i])
print(x.join(b))
문제 있음 !!!!!!!!!! len값에 한계가 옴
지금 예시는 가수들의 노래가 똑같이 3곡이기에 가능한 코딩이다.
번외문제:
아래의 캡쳐는
['Yesterday','let it be','Hey Jude']
['소원을 말해봐','Gee','다만세']
을 for 문 돌려서 +',' 붙여서 출력해준 값이다.
위의 값에 리스트화를 명령했는데 아래와 같이 출력되는 이유는?
파이썬이 Y e s t e r d a y 라고 모든걸 개별문자로 인식한다.
개별문자로 인식하지 않고, 리스트에 담아서 아래와 같이 출력하려면?
답:
출력하고자 하는 문자열이 리스트, 튜풀, 딕셔너리에 담겨져 있지 않으면
파이썬은 띄어쓰기부터 콤마까지 모든것을 하나의 문자로 인식한다.
위 값을 ',' 기준하여 split로 나눠주면
자동으로 리스트에 담겨진다.
문제324.
문제323번 코드에
shuffle 기능을 추가해서 수행될 때 마다 곡이 섞여서 나오게 하시오!
from random import shuffle
dic = {'Beatles':['Yesterday','let it be','Hey Jude'], \
'소녀시대':['소원을 말해봐','Gee','다만세'] }
for i in dic:
#print(i) key값 나오는거!
shuffle(dic[i]) #키값의 밸류를 셔플!
box2 = list(dic.values())
for i in range(len(box2[0])):
for j in range(len(box2)):
print(box2[j][i], end=', ')
***근데 이 값도 곡수가 달라지면
에러 나온다.
문제325.(점심시간 문제)
아래와 같이 소녀시대 곡을 하나 더 추가하고 잘 shuffle 되게 하시오!
from random import shuffle
dic = {}
dic['소녀시대'] = ['소원을 말해봐', 'Gee', '다만세', 'Oh!']
dic['Beatles'] = ['Yesterday', 'let it be', 'Hey Jude']
for i in dic:
shuffle(dic[i])
box2 = list(dic.values())
for i in range(len(box2[1])):
for j in range(len(box2)):
print(box2[j][0], end = ' ')
del box2[j][0]
for i in box2:
if i != []:
print(i[0])
del box2[box2.index(i)][0]
**위와 같은 경우에서만
돌아가는 코딩.
**완전히 다른 방법으로 접근해야 한다.
다른답:
지엽이가 버블정렬 이용해서 풀었던거
나도 풀어본 코딩
from collections import defaultdict
from random import shuffle
songs=defaultdict(list)
music='Yesterday\tLet it be\tGee\t소원을 말해봐\tOh\t불타오르네\tYes or Yes\tIDOL\tFAKE LOVE\t보고싶다'
artist='Beatles\tBeatles\t소녀시대\t소녀시대\t소녀시대\tBTS\t트와이스\tBTS\tBTS\t김범수'
music=music.split('\t')
artist=artist.split('\t')
for ar,mu in zip(artist,music):
songs[ar].append(mu)
#print(songs['Beatles'][1])
x=[]
for i in songs.values():
for j in i:
x.append(j)
t=1
while t>0:
shuffle(x)
bad=0
for i in songs.keys():
for j in range(len(x)-1): #10
if x[j] in songs[i] and x[j+1] in songs[i]:
bad+=1
if bad==0:
t=t-1
print(x)
# break # t=t-1 을 해서 while 종료조건 충족이라 안써도 됨.
■ 129. 사전 요소를 모두 추출하기(items)
*딕셔너리 자료형에서 데이터를 추출하는 방법
1. key 만 추출 : box.keys()
2. 값(values)만 추출: box.values()
3. 둘다 추출 : box.items()
문제326. 아래의 딕셔너리의 모든 요소를 다 출력하시오 !
dic = {'Beatles':['Yesterday','let it be','Hey Jude'], \
'소녀시대':['소원을 말해봐','Gee','다만세'] }
결과 :
dict_items([('Beatles', ['Yesterday', 'let it be', 'Hey Jude']), ('소녀시대', ['소원을 말해봐', 'Gee', '다 만세'])])
답:
print(dic.items())
■ 130. 사전(dictionary) 정렬하기 (sorted)
문제327. 아래의 딕셔너리 데이터의 키값을 ABCD 순으로 정렬해서
출력하시오 !
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
'Michale':27115, 'Bob':5887, 'Kelly':7855}
결과 :
['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']
답:
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
'Michale':27115, 'Bob':5887, 'Kelly':7855}
a=sorted(names.keys())
print(a)
||
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
'Michale':27115, 'Bob':5887, 'Kelly':7855}
a=sorted(names)
print(a)
*******딕셔너리의 디폴트값이 keys .
문제328.
names 사전의 데이터의 key 정렬할 때 아래와 같이 값도 같이 출력되게 하시오
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245,
'Michale':27115, 'Bob':5887, 'Kelly':7855}
a=sorted(names.items())
print(a)
'python' 카테고리의 다른 글
26. lambda, map (0) | 2019.03.26 |
---|---|
25. 문자코드값(ord, chr, eval) (0) | 2019.03.26 |
23. 리스트(range, copy, index, reverse, append, insert, del, remove, len, count, del, sort, shuffle, enumerate, all, any) (0) | 2019.03.26 |
22. 버블정렬 (0) | 2019.03.26 |
21. 문자열 다루기(split, join, replace, encode, decode) (0) | 2019.03.26 |