Programming Language/Python 공부

[Pylearn] 1222 / 딕셔너리 응용

hanseongjun 2021. 12. 22. 23:19
728x90
반응형

추가

- 딕셔너리는 키-값 쌍의 형태를 지닌 자료구조이다.

- 먼저 딕셔너리에서 가장 중요한 메서드 2개는 다음과 같다.

- setdefault : 키-값 쌍 추가(수정은 불가)
- update : 키-값 수정/추가(괄호 안에 들어가는 건 키가 문자열일때만 가능, 아닐 때는 전체 딕셔너리를 넣어야 함) 
# setdefault 메서드 -> 새로운 키-값 추가

x = {'a' : 10, 'b' : 20, 'c' : 30, 'd' : 40}
x.setdefault('e')		# 키만 추가
print(x)				# {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None}

x.setdefault('f', 100)	# 키와 값 추가
print(x)				# {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 100}


# update 메서드 -> 기존의 값 수정, 없으면 키-값 쌍 추가.
x = {'a' : 10, 'b' : 20, 'c' : 30, 'd' : 40}
x.update(a = 90)		# 키 a의 값을 90으로 변경
print(x)				# {'a': 90, 'b': 20, 'c': 30, 'd': 40}

x.update(e = 90)		# 없으면 키-값 추가
print(x)				# {'a': 90, 'b': 20, 'c': 30, 'd': 40, 'e': 90}

x.update(a = 900, f = 60)	# 여러 개를 한 번에 수정/추가할 수도 있음.
print(x)				# {'a': 900, 'b': 20, 'c': 30, 'd': 40, 'e': 90, 'f': 60}

 

- 여기서 주의할 점은, setdefault 메서드로는 수정이 불가능하며, update 메서드는 키의 형식이 문자열일 때만 괄호 안에 넣을 수 있다는 것이다. (그래서 괄호 안에 넣을 때 작은따옴표를 붙이지 않음.)

 

- 그래서 만약 키의 형식이 문자열이 아니라면, 다음과 같은 방법을 사용해야 한다.

# 1. 괄호 안에 딕셔너리를 넣기
y = {1 : 'one', 2 : 'two'}
y.update({1 : 'ONE', 3 : 'THREE'})	# 이처럼 딕셔너리를 update 메서드 안에 직접 넣는다.
print(y)					# {1: 'ONE', 2: 'two', 3: 'THREE'}

# 2. 리스트와 튜플 이용하기
# 리스트 -> [[key1, val1], [key2, val2]] 형식으로 [[키, 값], [키, 값]] 처럼 넣어줌.
# 튜플도 마찬가지이다.
y = {1 : 'one', 2 : 'two'}
y.update([[2 , 'TWO'], [4, 'FOUR']])
print(y)					# {1: 'one', 2: 'TWO', 4: 'FOUR'}

# 3. zip 객체와 같이 키-값 쌍으로 된 반복 가능한 객체
y = {1 : 'one', 2 : 'two'}
y.update(zip([1, 2], ['ONE', 'TWO']))
print(y)					# {1: 'ONE', 2: 'TWO'}

 


삭제

- 딕셔너리에서 키-값 쌍을 삭제하는 메서드는 다음 종류가 있다.

- pop 메서드 : 딕셔너리_이름.pop(키) 형태로 사용, 특정 키-값 쌍을 삭제한 뒤 그 값을 반환함.

- del 메서드 : del 딕셔너리_이름[키] 형태로 사용, 딕셔너리의 특정 키-값을 삭제함.

- popitem() 메서드 : 임의의 키-값 쌍을 삭제, 그 키-값 쌍을 반환함. pop메서드는 값만을 반환하지만 이 메서드는 키-값쌍을 튜플로 반환함.

- clear() 메서드 : 딕셔너리의 모든 키-값 쌍을 삭제함.

 

# pop 메서드
x = {'one' : 1, 'two' : 2, 'three' : 3}
x.pop('one')					# 1
print(x)						# {'two': 2, 'three': 3}

- ** 만약 내가 없애고자 한 키가 그 딕셔너리에 없을 경우, 오류가 난다. (리스트에서 범위 밖의 인덱스를 지정한 것과 비슷한 맥락으로 이해하면 될 것 같다)

- 이때 pop 메서드 안에 기본값을 지정해 주면 키가 없을 경우 기본값을 반환한다.

pop 기본값 지정

# del 메서드
x = {'one' : 1, 'two' : 2, 'three' : 3}
del x['one']
print(x)					# {'two': 2, 'three': 3}

- 또한 마찬가지로 del도 존재하지 않는 키를 입력하면 오류가 난다. 

del 키 오류

 


가져오기

- get() 메서드 : 딕셔너리에서 특정 키의 값을 가져온다.

- items() 메서드 : 딕셔너리의 키-값 쌍을 '모두' 가져온다.

- keys() 메서드 : 딕셔너리의 키를 '모두' 가져온다.

- values() 메서드 : 딕셔너리의 값을 '모두' 가져온다.

- items, keys, values 메서드는 for 반복문과 조합해서 사용한다고 한다.

# get 메서드
x = {'one' : 1, 'two' : 2, 'three' : 3}
x.get('one')					# 1

# 이렇게 할 수도 있다.
x['one']						# 1

- 여기서도 pop메서드처럼 기본값을 설정하면, 만약 키가 없을 경우 기본값을 반환한다.

# items 메서드
x = {'one' : 1, 'two' : 2, 'three' : 3, 'four' : 4}
x.items()					# dict_items([('one', 1), ('two', 2), ('three', 3), ('four', 4)])

# keys 메서드
x.keys()					# dict_keys(['one', 'two', 'three', 'four'])

# values 메서드
x.values()					# dict_values([1, 2, 3, 4])

- 혹시나 해서 각 메서드들의 반환값의 표현형을 type() 메서드를 이용해 봤는데 다음과 같다.

 


만들기

- 리스트/튜플로도 딕셔너리를 만들 수 있다.

- dict.fromkeys() 메서드를 이용해 키 리스트로 딕셔너리를 만들 수 있다.

- 이때, 값을 지정하지 않으면 값은 모두 None이 된다.

# 리스트로 딕셔너리 만들기
keys = ['one', 'two', 'three', 'four']
x = dict.fromkeys(keys)
print(x)					# {'one': None, 'two': None, 'three': None, 'four': None}


# 값을 지정했을 때
x = dict.fromkeys(keys, 100)
print(x)					# {'one': 100, 'two': 100, 'three': 100, 'four': 100}

 


반복문 이용하기

- for 반복문 이용하기

# 모든 키 출력하기
x = {'one' : 1, 'two' : 2, 'three' : 3, 'four' : 4}
for i in x:
	print(i, end = ' ')
							# one two three four , 키만 출력됨.

# 키와 값 모두 출력하기
for key, value in x.items():
	print(key, value)
    						# one 1
                            # two 2
                            # three 3
                            # four 4

# 같은 방법으로, 키만 출력하기
for key in x.keys():
	print(key, end = ' ')	# one two three four 


# 값만 출력하기
for value in x.values():
	print(value, end = ' ')	# 1 2 3 4

 


딕셔너리 표현식

- 이 부분은 아직 이해가 필요해 이후에 추가하도록 하겠다.

728x90
반응형
LIST