딕셔너리

Hyun·2023년 5월 20일
0

파이썬

목록 보기
2/17

딕셔너리

해쉬 함수를 이용하므로 속도 매우 빠름

기본 사용법

ex)

dict = {}
dict["a"] = "apple"
dict["b"] = "banana"
dict["c"] = "chrome"

print(dict) # {'a': 'apple', 'b': 'banana', 'c': 'chorme'}

del dict["a"]
print(dict) # {'b': 'banana', 'c': 'chorme'}

*주의할 점: 예를 들어 dict = {"3": 5, "1": 21, "2": 0} 일때, 값에 접근하기 위해서는 키값과 똑같이 문자(문자열) 형태인 dict["3"] 으로 접근해야만 한다. dict[3] 으로 접근할 수 없다!.

용이한 사용법들

리스트의 요소들을 for 문으로 돌면서 딕셔너리의 key 로 사용하여 값을 지정할때

ex) 일반적인 방법

arr = ["apple", "banana", "melon"]

dic = {}
for s in arr:
  dic[s]=0
print(dic) # {'apple': 0, 'banana': 0, 'melon': 0}

ex) 더 간단하게

arr = ["apple", "banana", "melon"]

dic = {s:0 for s in arr}
print(dic) # {'apple': 0, 'banana': 0, 'melon': 0}

keys()

딕셔너리의 Key만을 모아 dict_keys 객체를 리턴한다(배열 아님). 리스트로 변환하기 위해서는 list함수를 이용한다.
방법: 딕셔너리이름.keys()

ex)

dict = {}
dict["a"] = "apple"
dict["b"] = "banana"
dict["c"] = "chrome"

keysObject = dict.keys()
print(keysObject) # dict_keys('a', 'b', 'c')

keysArr = list(keysObject)
print(keysArr) # ['a', 'b', 'c']

values()

딕셔너리의 value만을 모아 dict_values 객체를 리턴한다(배열 아님). 리스트로 변환하기 위해서는 list함수를 이용한다.

ex)

dict = {"a":"apple", "b": "banana", "c":"chrome"}

valuesObject = dict.values()
print(valuesObject) # dict_values(['apple', 'banana', 'chrome'])

valuesArr = list(valuesObject)
print(valuesArr) # ['apple', 'banana', 'chrome']

items()

딕셔너리의 key/Value 쌍을 튜플로 만들어 값으로 갖는 dict_items 객체를 리턴한다(배열 아님). 리스트로 변환하기 위해서는 list함수를 이용한다.

ex)

dict = {"a":"apple", "b": "banana", "c":"chrome"}

itemsObject = dict.items()
print(itemsObject) # dict_items([('a', 'apple'), ('b', 'banana'), ('c', 'chrome')])

itemsArr = list(itemsObject)
print(itemsArr) # [('a', 'apple'), ('b', 'banana'), ('c', 'chrome')]

sorted()

딕셔너리를 정렬하여 리스트 형태로 반환해준다. 반환한 리스트를 다시 딕셔너리 자료형으로 변경하고 싶으면 dict() 함수를 사용한다.
방법: sorted(딕셔너리이름.items(), reverse = True/False)

=> key값을 기준으로 정렬하여 리스트 형태로 반환한다. 이때 딕셔너리 내부의 key/value 쌍은 튜플로 변환되어 (key, value) 형식으로 리스트의 요소가 된다. reverse 속성을 이용해 오름차순/내림차순 정렬방법을 선택할 수 있다(생략 시 reverse = False 로 적용)

만약 items()를 사용하지 않고 딕셔너리 이름만 인자로 넣어주면 key 값만을 정렬하여 리스트로 반환한다.

<딕셔너리에 list(), sorted() 함수를 적용할 때>
sorted() 와 list() 함수의 딕셔너리 사용에 있어서 차이는, 둘다 리스트로 변환하여 리턴하지만 정렬을 하고/안하고의 차이이며, sorted() 는 reverse 속성을 이용해 오름차순/내림차순을 선택할 수 있다는 것이다.

ex)

dict1 = {"melon": 5, "apple": 12, "banana": 7}
dict2 = {"3": 2, "1": 6, "2" :10}

arr1 = sorted(dict1) 
arr2 = sorted(dict2)
print(arr1) # ['apple', 'banana', 'melon']
print(arr2) # ['1', '2', '3']

arr1 = sorted(dict1.items())
arr2 = sorted(dict2.items())
print(arr1) # [('apple', 12), ('banana', 7), ('melon', 5)]
print(arr2) # [('1', 6), ('2', 10), ('3', 2)]

arr1 = sorted(dict1.items(), reverse = True)
arr2 = sorted(dict2.items(), reverse = True)
print(arr1) # [('melon', 5), ('banana', 7), ('apple', 12)]
print(arr2) # [('3', 2), ('2', 10), ('1', 6)]

ex) dict() 함수로 다시 딕셔너리 자료형으로 변경

dict1 = {"melon": 5, "apple": 12, "banana": 7}
dict2 = {"3": 2, "1": 6, "2" :10}

arr1 = sorted(dict1.items())
arr2 = dict(arr1)
print(arr1) # [('apple', 12), ('banana', 7), ('melon', 5)]
print(arr2) # {'apple': 12, 'banana': 7, 'melon': 5}

arr1 = sorted(dict2.items())
arr2 = dict(arr1)
print(arr1) # [('1', 6), ('2', 10), ('3', 2)]
print(arr2) # {'1': 6, '2': 10, '3': 2}

ex) list() vs sorted()

dict1 = {"melon": 5, "apple": 12, "banana": 7}
dict2 = {"3": 2, "1": 6, "2" :10}

arr1 = list(dict1)
arr2 = list(dict2)
print(arr1) # ['melon', 'apple', 'banana']
print(arr2) # ['3', '1', '2']

arr1 = sorted(dict1)
arr2 = sorted(dict2, reverse = True)
print(arr1) # ['apple', 'banana', 'melon']
print(arr2) # ['3', '2', '1']

arr1 = list(dict1.items())
arr2 = list(dict2.items())
print(arr1) # [('melon', 5), ('apple', 12), ('banana', 7)]
print(arr2) # [('3', 2), ('1', 6), ('2', 10)]

arr1 = sorted(dict1.items())
arr2 = sorted(dict2.items(), reverse = True)
print(arr1) # [('apple', 12), ('banana', 7), ('melon', 5)]
print(arr2) # [('3', 2), ('2', 10), ('1', 6)]

zip()

두 리스트의 각각의 원소들을 key, value로 하는 딕셔너리를 생성한다. (두 리스트의 원소 갯수가 동일해야 한다.)

ex)

name_dic = dict(zip(name, yearning))

리스트의 index와 value를 key와 value 쌍으로 가지는 딕셔너리 생성

ex)

    #index: 현재 등수, player: 해당 등수의 선수이름
    index_dic = {index: player for index, player in enumerate(players)}
    #player: 선수이름, index: 해당 선수의 현재 등수
    player_dic = {player: index for index, player in enumerate(players)}

딕셔너리에 특정 key값을 가지는 쌍이 있는지 검색

ex)

#name_arr 딕셔너리에 name이라는 키를 가지는 쌍이 존재하면 true 반환
if(name in name_dic): sum += name_dic[name]
profile
better than yesterday

0개의 댓글