[Python] 딕셔너리, Zip

·2024년 3월 22일

딕셔너리

Java와 C++에 map이 있다면, Python에는 딕셔너리가 있다.

키:값으로 이루어진 자료구조가 있다는 이야기다.

python에서 dict는 다음과 같이 만든다.

dict([키값들],[value값들])

#예시
dict1 = dict(['major','age'],['CSE',25])

print(dict['major']) # 'CSE'

딕셔너리 value 조회

딕셔너리는 키로 조회할 수 있고, get()이라는 메서드로 조회할 수도 있다.

dict[key]

dict1={'age':18}
print(dict1['age']) #18

대신, 딕셔너리에 인자로 넣은 key값이 없다면 오류가 난다.

dict.get(key)

다만 이는 key값이 존재하지 않아도 오류가 나지 않는다. (None으로 출력)

value들 조회

참고로 이들은 list형태가 아니라, 별도의 데이터 타입으로 존재한다.

dev=dict(['age','major'],[25,'CSE'])

dict.values()

#반환값은 dict.values 타입
print(dict.values()) # [25,'CSE']

key들 조회

dict.keys()

#반환값은 dict.keys 타입
print(dict.keys()) # ['age','major']

value-key 모두 조회

dict.items()

#반환값은 dict.values 타입
print(dict.values()) # [{'age':25},{'major':'CSE'}]

key 추가

dict[key]=value

존재하지 않는 키에 대해 새로운 값을 할당하면, 해당 딕셔너리의 키 값 쌍이 추가된다.

dict1={}

dict1['age']=18

print(dict1['age']) #18

dict.setdefault(key)

키만 추가하고 싶은 경우에는, setdefault()를 이용한다.

dict1={}
dict1.setdefault('age')

print(dict1['age']) #None

value 수정

value의 수정에는 두가지 방법이 있다.

dict[key]=value

존재하는 키에 대해 새로운 값을 할당하면, 해당 딕셔너리의 키 값 쌍이 수정된다.

dict1={'age':26}
dict1['age']=14

print(dict1['age']) #14

dict.update(key=value)

주의점

해당 메서드는 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({key:value})

dict_update.update({1:'ONE'})

아예 인자에 {키:값} 쌍을 넣어주면 된다.

삭제

만약에 키:값 쌍을 지워버리고 싶다면 pop이나 del을 쓰도록 하자 .

pop('key')

dev = {'major':'it','age':43}
dev.pop('age') #참고로 del dev['age']도 같은 의미다.

만약 싹 다 지워버리려고 한다면, clear()을 쓰도록 하자.

dev.clear(); 
print(dev) # {}

key만 가지고 딕셔너리 만들기

dict.fromkeys(list, default value)

리스트를 키값으로 하는 딕셔너리를 만들어줄 수 있다.
value 파라미터를 따로 넘기지 않으면 value는 None으로 할당된다.

keys = ['1등','2등','3등']

new_dict = dict.fromkeys(keys)
new_dict2=dict.fromkeys(keys,100)

ZIP

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값을 이용해서, 빈값을 만들어주지 말자!

profile
풀스택 호소인

0개의 댓글