본문 바로가기

python

24. 사전(del,clear,keys,values, items,sorte)

728x90
반응형

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)

 

 

 

 

 

 

 

 


728x90
반응형