
Java와 C++에 map이 있다면, Python에는 딕셔너리가 있다.
키:값으로 이루어진 자료구조가 있다는 이야기다.
python에서 dict는 다음과 같이 만든다.
dict([키값들],[value값들])
#예시
dict1 = dict(['major','age'],['CSE',25])
print(dict['major']) # 'CSE'
딕셔너리는 키로 조회할 수 있고, get()이라는 메서드로 조회할 수도 있다.
dict1={'age':18}
print(dict1['age']) #18
대신, 딕셔너리에 인자로 넣은 key값이 없다면 오류가 난다.
다만 이는 key값이 존재하지 않아도 오류가 나지 않는다. (None으로 출력)
참고로 이들은 list형태가 아니라, 별도의 데이터 타입으로 존재한다.
dev=dict(['age','major'],[25,'CSE'])
#반환값은 dict.values 타입
print(dict.values()) # [25,'CSE']
#반환값은 dict.keys 타입
print(dict.keys()) # ['age','major']
#반환값은 dict.values 타입
print(dict.values()) # [{'age':25},{'major':'CSE'}]
존재하지 않는 키에 대해 새로운 값을 할당하면, 해당 딕셔너리의 키 값 쌍이 추가된다.
dict1={}
dict1['age']=18
print(dict1['age']) #18
키만 추가하고 싶은 경우에는, setdefault()를 이용한다.
dict1={}
dict1.setdefault('age')
print(dict1['age']) #None
value의 수정에는 두가지 방법이 있다.
존재하는 키에 대해 새로운 값을 할당하면, 해당 딕셔너리의 키 값 쌍이 수정된다.
dict1={'age':26}
dict1['age']=14
print(dict1['age']) #14
주의점
해당 메서드는 key가 문자열일 때만 작동한다!
key가 문자열일 때, udpate안 key 인자에는 ''이 없다.
dict_update={'1':'one','2':'two','three':3}
dict_update.update(three = 33) ##dict_udpate['three'] == 33
만약 key가 숫자형태인데 value를 수정하고 싶다면?
dict_update.update({1:'ONE'})
아예 인자에 {키:값} 쌍을 넣어주면 된다.
만약에 키:값 쌍을 지워버리고 싶다면 pop이나 del을 쓰도록 하자 .
dev = {'major':'it','age':43}
dev.pop('age') #참고로 del dev['age']도 같은 의미다.
만약 싹 다 지워버리려고 한다면, clear()을 쓰도록 하자.
dev.clear();
print(dev) # {}
리스트를 키값으로 하는 딕셔너리를 만들어줄 수 있다.
value 파라미터를 따로 넘기지 않으면 value는 None으로 할당된다.
keys = ['1등','2등','3등']
new_dict = dict.fromkeys(keys)
new_dict2=dict.fromkeys(keys,100)
zip은 인자로 받은 객체를 순서대로 짝지어줘, 튜플 쌍으로 반환시키는 함수이다.
a=[1,2,3,4]
b=[5,6,7,8]
zipped = zip(a,b)
for element in zipped:
print(element)
#출력결과
(1,5)
(2,6)
(3,7)
(4,8)
이를 이용해 튜플 대신 딕셔너리도 만들 수 있다.
dict2 = dict(zip(['name','age'],['it'],[28]))
이 때 ZIP은 인자 중 가장 작은 요소 개수에 맞춰서 매핑한다!
즉,zip을 통해 깊은 복사를 하고 싶다면, fromkeys의 default값을 이용해서, 빈값을 만들어주지 말자!