[Python] tuple, dictionary

Jeongyun Heo·2020년 12월 14일
0

Python

목록 보기
2/36

점프 투 파이썬 참고: https://wikidocs.net/15, https://wikidocs.net/16

✍️  튜플(tuple)

immutable sequence (변경 불가능)
길이도 고정되어 있고 값도 고정되어 있다
값 추가, 삭제 불가능
b = (1, 2, 3)
인덱싱, 슬라이싱 가능
더하기, 곱하기 가능
tuple()

📕  리스트와 다른 점

[] 대신 ()로 감싸면 된다.1개의 요소만을 가질 때 요소 뒤에 콤마(,)를 반드시 붙여야 한다.
t1 = (1,)

✅ 괄호를 생략해도 된다.
t2 = 1, 2, 3

✍️  딕셔너리(dictionary)

Unit 12. 딕셔너리 사용하기
https://dojang.io/mod/page/view.php?id=2213

사전(dictionary)에서 단어를 찾듯이 값을 가져올 수 있다고 하여 딕셔너리라고 부른다.

중괄호로 딕셔너리 만들기

딕셔너리는 중괄호를 사용해서 만들 수 있다.
문자열은 작은따옴표나 큰따옴표를 사용한다.
key에는 value를 하나만 지정할 수 있다. (key-value는 1:1 대응)

딕셔너리 = {key1: value1, key2: value2}

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

키 이름이 중복되면?

딕셔너리에 key와 value를 저장할 때 key가 중복되면 가장 뒤에 있는 value만 사용한다. 확인해보면 딕셔너리에 마지막거 하나만 저장되어 있다. 따라서 중복되는 key는 저장되지 않는다.

>>> lux = {'health': 490, 'health': 800, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health']    # 키가 중복되면 가장 뒤에 있는 값만 사용함
800
>>> lux    # 중복되는 키는 저장되지 않음
{'health': 800, 'mana': 334, 'melee': 550, 'armor': 18.72}

딕셔너리 키의 자료형

딕셔너리의 key는 문자열뿐만 아니라 정수, 실수, 불도 사용할 수 있으며 자료형을 섞어서 사용해도 된다. 단, key에는 리스트와 딕셔너리를 사용할 수 없다.
value에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용할 수 있다.

빈 딕셔너리 만들기

빈 딕셔너리를 만들 때는 { }만 지정하거나 dict 함수를 사용하면 된다. 보통은 { }를 주로 사용한다.

딕셔너리 = {}
딕셔너리 = dict()

>>> x = {}
>>> x
{}
>>> y = dict()
>>> y
{}

dict로 딕셔너리 만들기

딕셔너리 = dict(key1=value1, key2=value2)
딕셔너리 = dict(zip([key1, key2], [value1, value2]))
딕셔너리 = dict([(key1, value1), (key2, value2)])
딕셔너리 = dict({key1: value1, key2: value2})

먼저 다음과 같이 dict에서 key=value 형식으로 딕셔너리를 만들 수 있다. 이때는 key에 ' '(작은따옴표)나 " "(큰따옴표)를 사용하지 않아야 한다. key는 딕셔너리를 만들고 나면 문자열로 바뀐다.

딕셔너리 = dict(key1=value1, key2=value2)

>>> lux1 = dict(health=490, mana=334, melee=550, armor=18.72)  # 키=값 형식으로 딕셔너리를 만듦
>>> lux1
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

두 번째 방법은 dict에서 zip 함수를 이용하는 방법이다. 다음과 같이 key가 들어 있는 리스트value가 들어 있는 리스트를 차례대로 zip에 넣은 뒤 다시 dict에 넣어주면 된다. 물론 key와 value를 리스트가 아닌 튜플에 저장해서 zip에 넣어도 된다.

딕셔너리 = dict(zip([key1, key2], [value1, value2]))

>>> lux2 = dict(zip(['health', 'mana', 'melee', 'armor'], [490, 334, 550, 18.72]))   
>>> lux2   # zip 함수로 key 리스트와 value 리스트를 묶음
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

세 번째 방법은 리스트 안에 (key, value) 형식의 튜플을 나열하는 방법이다.

딕셔너리 = dict([(key1, value1), (key2, value2)])

>>> lux3 = dict([('health', 490), ('mana', 334), ('melee', 550), ('armor', 18.72)])
>>> lux3   # (키, 값) 형식의 튜플로 딕셔너리를 만듦
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

네 번째 방법은 dict 안에서 중괄호로 딕셔너리를 생성하는 방법이다.

딕셔너리 = dict({key1: value1, key2: value2})

>>> lux4 = dict({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})
>>> lux4   # dict 안에서 중괄호로 딕셔너리를 만듦
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

딕셔너리 key에 접근하고 value 할당하기

딕셔너리의 key에 접근할 때는 딕셔너리 뒤에 대괄호를 사용하여 대괄호 안에 key를 지정해주면 된다.

딕셔너리[key]

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health']
490
>>> lux['armor']
18.72

딕셔너리의 key에 value 할당하기

딕셔너리는 [ ]로 key에 접근한 뒤 value를 할당한다.

딕셔너리[key] = value

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> lux['health'] = 2037    # key 'health'의 값을 2037로 변경
>>> lux['mana'] = 1184      # key 'mana'의 값을 1184로 변경
>>> lux
{'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72}

딕셔너리에 없는 key에 value를 할당하면 해당 key가 추가되고 value가 할당된다.

>>> lux['mana_regen'] = 3.28    # key 'mana_regen'을 추가하고 값 3.28 할당
>>> lux
{'health': 2037, 'mana': 1184, 'melee': 550, 'armor': 18.72, 'mana_regen': 3.28}

딕셔너리는 없는 key에서 값을 가져오려고 하면 에러가 발생한다.

딕셔너리에 key가 있는지 확인하기

딕셔너리에서 key가 있는지 확인하고 싶다면 in 연산자를 사용하면 됩니다.
딕셔너리에 특정 키가 있으면 True, 없으면 False가 나온다.

키 in 딕셔너리

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> 'health' in lux
True
>>> 'attack_speed' in lux
False

반대로 in 앞에 not을 붙이면 특정 키가 없는지 확인한다.
not in은 특정 키가 없으면 True, 있으면 False가 나온다.

>>> 'attack_speed' not in lux
True
>>> 'health' not in lux
False

해시
딕셔너리는 해시(Hash) 기법을 이용해서 데이터를 저장한다. 보통 딕셔너리와 같은 key-value 형태의 자료형을 해시, 해시 맵, 해시테이블 등으로 부르기도 한다.

딕셔너리의 key 개수 구하기

key의 개수는 len 함수를 사용하여 구한다.(key와 value는 1:1 관계이므로 key의 개수는 곧 value의 개수이다).

len(딕셔너리)

>>> lux = {'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}
>>> len(lux)
4
>>> len({'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72})
4

len(lux)와 같이 len에 딕셔너리 변수를 넣어서 key의 개수를 구해도 되고, len에 딕셔너리를 그대로 넣어도 된다.

지금까지 딕셔너리의 사용 방법에 대해 알아보았다. 딕셔너리를 생성할 때는 { }(중괄호)를 사용하고, key와 value를 1:1 관계로 저장한다는 점이 중요하다. 특히 딕셔너리는 특정 주제에 대해 연관된 값을 저장할 때 사용한다는 점도 꼭 기억해두자. 이 부분이 리스트, 튜플과 딕셔너리의 차이점이다.

딕셔너리 응용하기

Unit 25. 딕셔너리 응용하기
https://dojang.io/mod/page/view.php?id=2307

이번에는 딕셔너리의 key-value 쌍을 조작하는 메서드와 정보를 조회하는 메서드를 사용해보자. 그리고 for 반복문을 사용하여 key와 value에 접근하는 방법, 딕셔너리 표현식, 중첩 딕셔너리도 함께 대해 알아보자.

딕셔너리 조작하기

딕셔너리를 조작하는 메서드와 정보를 얻는 메서드부터 알아보자.
파이썬에서 제공하는 딕셔너리 메서드는 여러 가지가 있지만 여기서는 자주 쓰는 메서드를 설명하겠다.

딕셔너리에 key-value 쌍 추가하기

다음과 같이 딕셔너리에 key-value 쌍을 추가하는 메서드는 2가지가 있다.

setdefault: key-value 쌍 추가, 추가만 가능하고 수정은 불가능
update: key의 value 수정, key가 없으면 key-value 쌍 추가

딕셔너리에 key와 기본값 저장하기

setdefault(키)는 딕셔너리에 key-value 쌍을 추가한다. setdefault에 key만 지정하면 value에 None을 저장한다. 다음은 키 'e'를 추가하고 값에 None을 저장한다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.setdefault('e')
>>> x
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None}

setdefault(키, 기본값)처럼 키와 기본값을 지정하면 값에 기본값을 저장한 뒤 해당 값을 반환한다. 다음은 키 'f'를 추가하고 값에 100을 저장한 뒤 100을 반환한다.

>>> x.setdefault('f', 100)
100
>>> x
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 100}

딕셔너리에서 key의 value 수정하기

update 메서드를 사용
update(key=value)는 딕셔너리에서 key의 value를 수정한다.
만약 딕셔너리에 key가 없으면 key-value 쌍을 추가한다.
이때는 key에 ' '(작은따옴표)나 " "(큰따옴표)를 사용하지 않아야 한다. key는 딕셔너리를 만들고 나면 문자열로 바뀐다. value는 문자열인 경우 작은따옴표나 큰따옴표를 사용해야 한다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.update(a=90)
>>> x
{'a': 90, 'b': 20, 'c': 30, 'd': 40}

딕셔너리 x에는 키 'e'가 없으므로 x.update(e=50)을 실행하면 'e': 50을 추가한다.

>>> x.update(e=50)
>>> x
{'a': 90, 'b': 20, 'c': 30, 'd': 40, 'e': 50}

update는 key-value 쌍 여러 개를 콤마로 구분해서 넣어주면 값을 한꺼번에 수정할 수 있다. 이때도 key가 있으면 해당 key의 value를 수정하고 없으면 key-value 쌍을 추가한다. 다음은 키 'a'의 값을 900으로 수정하고, 'f': 60을 추가한다.

>>> x.update(a=900, f=60)
>>> x
{'a': 900, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 60}

update(key=value)는 key가 문자열일 때만 사용할 수 있다. 만약 key가 숫자일 경우에는 update(딕셔너리)처럼 딕셔너리를 넣어서 value를 수정할 수 있다.

>>> y = {1: 'one', 2: 'two'}
>>> y.update({1: 'ONE', 3: 'THREE'})
>>> y
{1: 'ONE', 2: 'two', 3: 'THREE'}

다른 방법으로는 리스트와 튜플을 이용하는 방법도 있다. update(리스트), update(튜플)은 리스트와 튜플로 value를 수정한다. 여기서 리스트는 [[key1, value1], [key2, value2]] 형식으로 key와 value를 리스트로 만들고 이 리스트를 다시 리스트 안에 넣어서(2차원 리스트) key-value 쌍을 나열해준다(튜플도 같은 형식).

key가 문자열이면 작은따옴표나 큰따옴표를 사용한다. value도 마찬가지.

>>> y.update([[2, 'TWO'], [4, 'FOUR']])  # 2차원 리스트
>>> y
{1: 'ONE', 2: 'TWO', 3: 'THREE', 4: 'FOUR'}
>>> lux.update([['speed', 'not bad']])  # 2차원 리스트
>>> lux
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72, 'speed': 'not bad'}

특히 update(반복가능한객체)는 key-value 쌍으로 된 반복 가능한 객체로 value를 수정한다. 즉, 다음과 같이 key가 들어 있는 리스트value가 들어 있는 리스트를 묶은 zip 객체로 값을 수정할 수 있다.

>>> y.update(zip([1, 2], ['one', 'two']))
>>> y
{1: 'one', 2: 'two', 3: 'THREE', 4: 'FOUR'}

setdefault와 update의 차이
setdefault는 key-value 쌍 추가만 할 수 있고, 이미 들어있는 key의 값은 수정할 수 없다. 하지만 update는 key-value 쌍 추가와 value 수정이 모두 가능하다. 다음과 같이 setdefault로 이미 들어있는 키 'a'를 90으로 저장해도 'a'의 값은 바뀌지 않는다.

>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>> x.setdefault('a', 90)
10
>> x
{'a': 10, 'b': 20, 'c': 30, 'd': 40}

딕셔너리에서 key-value 쌍 삭제하기

이번에는 딕셔너리에서 key-value 쌍을 삭제하는 메서드를 사용해보자.

pop(키)는 딕셔너리에서 특정 key-value 쌍을 삭제한 뒤 삭제한 value를 반환한다. 다음은 딕셔너리 x에서 키 'a'를 삭제한 뒤 10을 반환한다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.pop('a')
10
>>> x
{'b': 20, 'c': 30, 'd': 40}

pop(키, 기본값)처럼 기본값을 지정하면 딕셔너리에 key가 있을 때는 해당 key-value 쌍을 삭제한 뒤 삭제한 value를 반환하지만 key가 없을 때는 기본값을 반환한다. 딕셔너리 x에는 키 'z'가 없으므로 기본값으로 지정한 0을 반환한다.

>>> x.pop('z', 0)
0

pop 대신 del로 특정 key-value 쌍을 삭제할 수도 있다. 이때는 [ ]에 key를 지정하여 del을 사용한다. 다음은 딕셔너리 x의 키 'a'를 삭제한다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> del x['a']
>>> x
{'b': 20, 'c': 30, 'd': 40}

딕셔너리에서 임의의 key-value 쌍 삭제하기

popitem()은 딕셔너리에서 임의의 key-value 쌍을 삭제한 뒤 삭제한 key-value 쌍을 튜플로 반환한다. 이 메서드는 파이썬 버전에 따라 동작이 달라지는데, 파이썬 3.6 이상에서는 마지막 key-value 쌍을 삭제하며 3.5 이하에서는 임의의 key-value 쌍을 삭제한다.

여기서는 파이썬 3.6 이상을 기준으로 설명하겠다. 다음은 딕셔너리 x에서 마지막 key-value 쌍인 'd': 40을 삭제한다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.popitem()
('d', 40)  # 삭제한 key, value 튜플로 반환
>>> x
{'a': 10, 'b': 20, 'c': 30}

딕셔너리의 모든 key-value 쌍을 삭제하기

clear()는 딕셔너리의 모든 key-value 쌍을 삭제한다. 다음은 딕셔너리 x의 모든 key-value 쌍을 삭제하여 빈 딕셔너리 {}가 된다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.clear()
>>> x
{}

딕셔너리에서 key의 value 가져오기

get(키)는 딕셔너리에서 특정 key의 value를 가져온다. 다음은 딕셔너리 x에서 키 'a'의 값을 가져온다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.get('a')
10

get(키, 기본값)처럼 기본값을 지정하면 딕셔너리에 key가 있을 때는 해당 key의 value를 반환하지만 key가 없을 때는 기본값을 반환한다. 딕셔너리 x에는 키 'z'가 없으므로 기본값으로 지정한 0을 반환한다.

>>> x.get('z', 0)
0

딕셔너리에서 key-value 쌍을 모두 가져오기

딕셔너리는 key와 value를 가져오는 다양한 메서드를 제공한다.
이 메서드들은 보통 for 반복문과 조합해서 사용한다.

딕셔너리.items(): key-value 쌍을 모두 가져옴
딕셔너리.keys(): key를 모두 가져옴
딕셔너리.values(): value를 모두 가져옴

다음과 같이 items()는 딕셔너리의 key-value 쌍을 모두 가져온다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.items()
dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 40)])

keys()는 키를 모두 가져온다.

>>> x.keys()
dict_keys(['a', 'b', 'c', 'd'])

values()는 값을 모두 가져온다.

>>> x.values()
dict_values([10, 20, 30, 40])

이 메서드들은 보통 for 반복문과 조합해서 사용한다.

리스트와 튜플로 딕셔너리 만들기

이번에는 리스트(튜플)로 딕셔너리를 만들어 보자.

먼저 keys = ['a', 'b', 'c', 'd']처럼 key가 들어있는 리스트를 준비한다(튜플도 된다). 그리고 dict.fromkeys에 key가 들어있는 리스트를 넣으면 딕셔너리를 생성한다.

dict.fromkeys(key리스트)는 key 리스트로 딕셔너리를 생성하며 값은 모두 None으로 저장한다.

>>> keys = ['a', 'b', 'c', 'd']
>>> x = dict.fromkeys(keys)
>>> x
{'a': None, 'b': None, 'c': None, 'd': None}
>>> x = dict.fromkeys(['a', 'b', 'c', 'd'])
>>> x
{'a': None, 'b': None, 'c': None, 'd': None}

dict.fromkeys(key리스트, value)처럼 key 리스트와 value를 지정하면 해당 값이 key의 값으로 저장된다.

>>> y = dict.fromkeys(keys, 100)
>>> y
{'a': 100, 'b': 100, 'c': 100, 'd': 100}

defaultdict 사용하기
지금까지 사용한 딕셔너리(dict)는 없는 key에 접근했을 경우 에러가 발생한다.

>> x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
>> x['z']    # 키 'z'는 없음
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    x['z']
KeyError: 'z'

defaultdict는 없는 key에 접근하더라도 에러가 발생하지 않으며 기본값을 반환한다. defaultdict는 collections 모듈에 들어있으며 기본값 생성 함수를 넣는다.
defaultdict(기본값생성함수)

>> from collections import defaultdict
>> y = defaultdict(int)   # int 함수로 기본값 생성

int 함수는 실수나 문자열을 정수로 변환하지만, 다음과 같이 int에 아무것도 넣지 않고 호출하면 0을 반환한다.

>> int()
0

defaultdict에는 특정 값을 반환하는 함수를 넣어주면 되는데, defaultdict(int)는 기본값 생성 함수로 int를 지정하여 0이 나오도록 만든 것이다.
0이 아닌 다른 값을 기본값으로 설정하고 싶다면 다음과 같이 기본값 생성 함수를 만들어서 넣어주면 된다.

>> z = defaultdict(lambda: 'python')
>> z['a']
'python'
>> z[0]
'python'

반복문으로 딕셔너리의 key-value 쌍을 모두 출력하기

이번에는 딕셔너리와 for 반복문을 사용하여 간단하게 모든 key-value 쌍을 출력해보자.

for in 뒤에 딕셔너리를 지정하고 items를 사용해야 한다.

딕셔너리.items(): key-value 쌍을 모두 가져옴

for,in 딕셔너리.items():
    반복할 코드
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> for key, value in x.items():
...     print(key, value)
...
a 10
b 20
c 30
d 40

물론 in 다음에 딕셔너리를 직접 지정하고 items를 사용해도 상관 없다.

for key, value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.items():
    print(key, value)

딕셔너리의 key만 출력하기

딕셔너리.keys(): key를 모두 가져옴

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> for key in x.keys():
...     print(key, end=' ')
...
a b c d

딕셔너리의 value만 출력하기

딕셔너리.values(): value를 모두 가져옴

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> for value in x.values():
...     print(value, end=' ')
...
10 20 30 40

딕셔너리 표현식 사용하기

리스트와 마찬가지로 딕셔너리도 for 반복문과 if 조건문을 사용하여 딕셔너리를 생성할 수 있다. 다음과 같이 딕셔너리 안에 key와 value, for 반복문을 지정하면 된다.

{key: value for key, value in 딕셔너리}
dict({key: value for key, value in 딕셔너리})

dict.fromkeys(key리스트)는 key 리스트로 딕셔너리를 생성하며 값은 모두 None으로 저장한다.

>>> keys = ['a', 'b', 'c', 'd']
>>> x = {key: value for key, value in dict.fromkeys(keys).items()}
>>> x
{'a': None, 'b': None, 'c': None, 'd': None}

딕셔너리 표현식을 사용할 때는 for in 다음에 딕셔너리를 지정하고 items()를 사용합니다. 그리고 key, value를 가져온 뒤에는 key: value 형식으로 변수나 값을 배치하여 딕셔너리를 생성하면 됩니다.

즉, dict.fromkeys(keys).items()로 key-value 쌍을 구한 뒤 키는 변수 key, 값은 변수 value에 꺼내고 최종적으로 key와 value를 이용하여 딕셔너리를 만듭니다.

다음과 같이 keys로 키만 가져온 뒤 특정 값을 넣거나, values로 값을 가져온 뒤 값을 키로 사용할 수도 있다.

>>> {key: 0 for key in dict.fromkeys(['a', 'b', 'c', 'd']).keys()}  # 키만 가져옴
{'a': 0, 'b': 0, 'c': 0, 'd': 0}
>>> {value: 0 for value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.values()}  # 값을 키로 사용
{10: 0, 20: 0, 30: 0, 40: 0}

또는, key와 value의 자리를 바꾸는 등 여러 가지로 응용할 수 있다.

>>> {value: key for key, value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.items()}  
{10: 'a', 20: 'b', 30: 'c', 40: 'd'}  # key-value 자리를 바꿈

딕셔너리 표현식에서 if 조건문 사용하기

딕셔너리 표현식은 딕셔너리에서 특정 값을 찾아서 삭제할 때 유용하다.

딕셔너리는 for 반복문으로 반복하면서 key-value 쌍을 삭제하면 안 된다.
별 문제 없이 잘 삭제될 것 같지만 반복 도중에 딕셔너리의 크기가 바뀌었다는 에러가 발생한다.

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
 
for key, value in x.items():
    if value == 20:    # 값이 20이면
        del x[key]     # key-value 쌍 삭제
 
print(x)

Traceback (most recent call last):
  File "C:\project\dict_del_by_value_error.py", line 3, in <module>
    for key, value in x.items():
RuntimeError: dictionary changed size during iteration 

이때는 딕셔너리 표현식에서 if 조건문을 사용하여 삭제할 값을 제외하여 새로운 딕셔너리를 만든다.

{key: value for key, value in 딕셔너리 if 조건식}
dict({key: value for key, value in 딕셔너리 if 조건식})

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x = {key: value for key, value in x.items() if value != 20}
>>> x
{'a': 10, 'c': 30, 'd': 40}

딕셔너리 표현식에서 if value != 20과 같이 if 조건문을 지정하면 값이 20이 아닌 key-value 쌍으로 다시 딕셔너리를 만든다. 직접 key-value 쌍을 삭제하는 방식이 아니라 삭제할 key-value 쌍을 제외하고 남은 key-value 쌍으로 딕셔너리를 새로 만드는 것이다.


연관 배열 또는 해시
키를 이용해서 값을 빠르게 찾을 수 있음
키를 검색해서 값을 바로 찾을 수 있음
키를 가지고 사전 검색하듯이 값을 볼 수 있음
API에 자주 활용됨
Key: Value
Key를 통해 Value를 얻는다
{ } 중괄호 사용, 항목은 콤마로 구분
딕셔너리 안에 튜플이나 리스트도 입력 가능

🔷  값을 찾는 방법 (Key로 Value얻기)

리스트나 튜플에서 사용하는 인덱싱으로 찾기 불가능.
Key를 이용해서 Value를 알 수 있다.

딕셔너리변수이름[Key] ⬅️ [ ] 안에 Key 입력

dic = {'name': 'Eric', 'age': 15}
print(dic['name']) 👉 Eric
✅ get 함수 사용

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다.

딕셔너리변수이름.get(Key)

🔷  딕셔너리 쌍 추가

새로운 key 새로운 value 추가

a = {1: 'a'}
a['name'] = "익명"
print(a) 👉 {1: 'a', 'name': '익명'}

💡 핵심: Key와 Value로 이루어져 있다

🔷  딕셔너리 요소 삭제하기

a = {1: 'a'}
a['name'] = "익명"

del a[1] # 괄호 안에 key 입력 (인덱스 아님)

print(a) 👉 {'name': '익명'}
# key가 1이고 value가 a인 쌍이 지워짐

딕셔너리 만들 때 주의사항
key가 중복되면 안 됨. value는 중복 가능
중복되는 게 있으면 제일 마지막에 입력한 key와 value로 나옴

🔷  Key 리스트 만들기(keys)

key 따로 뽑고 value 따로 뽑을 수 있음
for문에서 많이 쓰임

key들만 따로 뽑을 수 있다

a = {'apple': 'good', 'banana': 'nice', 'orange': 'not bad'}
print(a.keys()) 
👉 dict_keys(['apple', 'banana', 'orange'])

🔷  Value 리스트 만들기(values)

value들만 따로 뽑을 수 있다

a = {'apple': 'good', 'banana': 'nice', 'orange': 'not bad'}
print(a.values()) 
👉 dict_values(['good', 'nice', 'not bad'])

🔷  Key, Value 쌍 얻기(items)

새로운 배열 안에 튜플 형태로 각각 key, value 쌍으로 나옴

a = {'apple': 'good', 'banana': 'nice', 'orange': 'not bad'}
print(a.items())
👉 dict_items([('apple', 'good'), ('banana', 'nice'), ('orange', 'not bad')])

for문에서 이용

for k in a.keys():
    print(k)

for v in a.values():
    print(v)
    
for i in a.items():
    print(i)

🔷  Key: Value 쌍 모두 지우기(clear)

a = {'apple': 'good', 'banana': 'nice', 'orange': 'not bad'}
a.clear()
print(a) 👉 {}

0개의 댓글