처음부터 차근차근 파이썬 자세히보기

Python-기본/Python-데이터 타입 및 자료 구조

Python-컬렉션 데이터 타입(2. 딕셔너리)

윤빵빵영 2021. 1. 12. 10:16

딕셔너리는 파이썬에서 제공하는 기본 자료형으로 해시 테이블(hash table)로 구현되어 있습니다. 해시 테이블은 키와 값이 연관되어 있고, 키(key)를 통해 연관된 값(value)을 얻는 연관 배열(associative array)을 구현하는 데 사용되는 자료구조로 리스트와 유사하지만 값이 순서가 아닌 값에 연결되는 키로 값을 조회할 수 있습니다. 딕셔너리는 가변(mutable) 자료형으로 딕셔너리 내의 키-값 요소의 추가, 삭제, 변환이 자유롭습니다. 


목차

1. 딕셔너리 선언
2. 자료형 변환 dict( )
3. 컬렉션 데이터 타입 속성-딕셔너리
  (1). 멤버십 연산 in
  (2). 크기 함수 len(seq)
  (3). 반복성(iterable)
4. 딕셔너리: 자료 조회, 추가 및 삭제
  (1) [key]를 이용한 자료 조회, 추가, 삭제
  (2) del을 이용한 자료 삭제
5. 딕셔너리 메서드
  (1) setdefault( )
  (2) update( )
  (3) get( )
  (4) items( ), values( ), keys( )
  (5) pop( ), popitem( )
  (6) clear( )


 

1. 딕셔너리 선언

딕셔너리도 셋과 동일하게 중괄호 { }를 이용하여 선언합니다.

빈 딕셔너리는 괄호 내 아무런 요소 없이 선언함으로써 만들 수 있습니다.

empty_dict = { }
print(empty_dict)
print(type(empty_dict))

결과)

{}
<class 'dict'>


딕셔너리 내 요소는 키-값 쌍으로 구성되며 이는 콜론(:)을 통해 연결됩니다. 따라서 요소를 포함한 딕셔너리를 만들 때는 key:value 형태를 { } 내 포함시키면 됩니다. 이때 시각적 편의를 위해서 줄바꿈 등이 허용됩니다.

tarantino = {'name': 'Quentin Tarantino', 'job': 'director'}
mipro = {
'302': ['전영근', '김현수'],
'icp': ['윤영', '홍진우']
}
print(tarantino)
print(mipro)

결과)

{'name': 'Quentin Tarantino', 'job': 'director'}
{'302': ['전영근', '김현수'], 'icp': ['윤영', '홍진우']}

 

2. 자료형 변환 dict( )

dict( ) 함수는 두 개의 값으로 구성되어 있는 시퀀스 자료형을 딕셔너리로 변환합니다. 시퀀스 자료형으로는 문자열, 튜플, 리스트가 있다는 것을 배웠습니다. 

lol = [['a', 'b'], ['c', 'd'], ['e', 'f']]
print(dict(lol))
lot = [('a', 'b'), ('c', 'd'), ('e', 'f')]
print(dict(lot))
tol = (['a', 'b'], ['c', 'd'], ['e', 'f'])
print(dict(tol))
los = ['ab', 'cd', 'ef']
print(dict(los))
tos = ('ab', 'cd', 'ef')
print(dict(tos))

결과)

{'a': 'b', 'c': 'd', 'e': 'f'}
{'a': 'b', 'c': 'd', 'e': 'f'}
{'a': 'b', 'c': 'd', 'e': 'f'}
{'a': 'b', 'c': 'd', 'e': 'f'}
{'a': 'b', 'c': 'd', 'e': 'f'}

 

3. 컬렉션 데이터 타입 속성-딕셔너리

  (1). 멤버십 연산 in

딕셔너리 내 특정 키가 존재하는지 확인하는 데 사용됩니다. 

pythons = {'Chapman': 'Graham', 'Cleese': 'John', 'Jones': 'Terry', 'Palin': 'Michael'}
print('Chapman' in pythons)
print('John' in pythons)

결과)

True
False


키가 아닌 값을 조회할 경우 False를 반환합니다. 

 

  (2). 크기 함수 len(seq)

딕셔너리 내 key:value 쌍이 몇 개인지를 출력합니다.

pythons = {'Chapman': 'Graham', 'Cleese': 'John', 'Jones': 'Terry', 'Palin': 'Michael'}
print(len(pythons))

결과)

4

 

  (3). 반복성(iterable)

컬렉션 자료형인 딕셔너리는 iterable입니다. for이나 while과 같은 구문을 이용한 반복 처리가 가능하며 key를 순회하며 조회합니다.

pythons = {'Chapman': 'Graham', 'Cleese': 'John', 'Jones': 'Terry', 'Palin': 'Michael'}
for key in pythons:
    print(key)

결과)

Chapman
Cleese
Jones
Palin

 

4. 딕셔너리: 자료 조회, 추가 및 삭제

  (1) [key]를 이용한 자료 조회, 추가, 삭제

딕셔너리 내에 있는 특정 키에 대한 값을 조회하기 위해서는 dic[key]를 조회하면 됩니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee'
}
print(coffee['윤영'])

결과)

latte


딕셔너리에 새로운 요소나 항목을 추가할 때는 대괄호를 이용하여 dic[key] = value와 같이 선언하면 자료가 추가됩니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee'
}
coffee['명경규'] = 'mocha'
print(coffee)

결과)

{'전영근': 'americano', '윤영': 'latte', '김현수': 'iced coffee', '명경규': 'mocha'}


자료의 변경도 마찬가지로 dic[key] = value와 같이 선언하면 됩니다. 다만 이때 key는 기존에 딕셔너리 내에 있는 key여야 합니다. 없다면 새로운 자료가 추가됩니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha'
}
coffee['명경규'] = 'hot coffee'
print(coffee)

결과)

{'전영근': 'americano', '윤영': 'latte', '김현수': 'iced coffee', '명경규': 'hot coffee'}

 

  (2) del을 이용한 자료 삭제

del 선언을 통해 딕셔너리 내 특정 키로 인식되는 키:값 쌍을 삭제할 수 있습니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha'
}
del coffee['명경규']
print(coffee)

결과)

{'전영근': 'americano', '윤영': 'latte', '김현수': 'iced coffee'}

 

5. 딕셔너리 메서드

setdefault( ), update( ), get( ), items( ), values( ), keys( ), pop( ), popitem( ), clear( )

  (1) setdefault( )

setdefault( ) 메서드는 딕셔너리에서 키의 존재 여부를 모른 채 접근하여 조회할 때 사용됩니다. 디셔너리에 존재하지 않는 키에 접근하면 예외가 발생합니다.

A.setdefault(key, default): 딕셔너리 A에 key가 존재할 경우 키에 해당하는 값을 얻을 수 있고, key가 존재하지 않는다면 새 키와 기본값 default가 딕셔너리에 저장됩니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha'
}
print(coffee.setdefault('전영근', 'cappuccino'))
print(coffee.setdefault('김태영', 'cappuccino'))
print(coffee)

결과)

americano
cappuccino
{'전영근': 'americano', '윤영': 'latte', '김현수': 'iced coffee', '명경규': 'mocha', '김태영': 'cappuccino'}

 

  (2) update( )

A.update(B): 딕셔너리 A에 딕셔너리 B의 키가 존재한다면, 기존 A의 키:값 쌍을 B의 키:값으로 갱신합니다. B의 키가 A에 존재하지 않는다면, B의 키:값을 A에 추가합니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
coffee.update({'전현우': 'latte', '홍진우': 'iced coffee', '윤영': 'mocha'})
print(coffee)

결과)

{'전영근': 'americano', '윤영': 'mocha', '김현수': 'iced coffee', '명경규': 'mocha', '김태영': 'cappuccino', '전현우': 'latte', '홍진우': 'iced coffee'}

 

  (3) get( )

A.get(key): 딕셔너리 A의 key 값을 반환합니다. key가 존재하지 않으면 아무것도 반환하지 않습니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
print(coffee.get('윤영'))
print(coffee.get('홍진우'))
print(coffee['홍진우'])

결과)

    print(coffee['홍진우'])
KeyError: '홍진우'
latte
None

 

  (4) items( ), values( ), keys( )

items( ), keys( ), values( ) 메서드는 딕셔너리의 뷰(딕셔너리의 항목을 조회하는 읽기 전용의 반복 가능한 객체)입니다. items( )는 키:값 쌍으로, keys( )는 키로, values( )는 값으로 이루어지는 iterable을 반환합니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
print(coffee.items( ))
print(coffee.keys( ))
print(coffee.values( ))

결과)

dict_items([('전영근', 'americano'), ('윤영', 'latte'), ('김현수', 'iced coffee'), ('명경규', 'mocha'), ('김태영', 'cappuccino')])
dict_keys(['전영근', '윤영', '김현수', '명경규', '김태영'])
dict_values(['americano', 'latte', 'iced coffee', 'mocha', 'cappuccino'])


iterable이기 때문에 for 문과 같은 문법으로 순회가 가능합니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
for i in coffee.items( ):
    print(i)

결과)

('전영근', 'americano')
('윤영', 'latte')
('김현수', 'iced coffee')
('명경규', 'mocha')
('김태영', 'cappuccino')


items( )의 경우 (키, 값) 형태의 튜플을 반환합니다. keys( )와 values( )는 해당 자료형을 반환합니다.

 

  (5) pop( ), popitem( )

A.pop(key): 딕셔너리 A의 key 항목을 제거한 후 그 값을 반환합니다.

A.popitem( ): 딕셔너리 A에서 항목(키와 값)을 제거한 후 그 키와 항목을 반환합니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
print(coffee.pop('명경규'))
print(coffee.popitem( ))
print(coffee.popitem( ))
print(coffee)

결과)

mocha
('김태영', 'cappuccino')
('김현수', 'iced coffee')
{'전영근': 'americano', '윤영': 'latte'}

 

  (6) clear( )

A.clear( ): 딕셔너리 내 모든 항목을 제거합니다.

coffee = {
'전영근': 'americano',
'윤영': 'latte',
'김현수': 'iced coffee',
'명경규': 'mocha',
'김태영': 'cappuccino'

}
coffee.clear( )
print(coffee)

결과)

{}