본문 바로가기
Python

Python - 기초 자료형(딕셔너리)

by DGK 2021. 10. 13.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

기초 자료형(딕셔너리)

 

  • 기본 개념
딕셔너리 자료형은 순서가 없고 키의 중복을 허용하지 않지만, 수정 및 삭제는 가능한 자료형이다.
또한, 범용적으로 가장 많이 사용되는 자료형으로 타 언어의 오브젝트 및 JSON과 유사한 형태를 가진다.

# 선언 방식

a = {'name': 'Kim', 'phone': '01042438553', 'birth': '931021'} 
b = {0: 'Hello Python'}  
c = {'arr': [1, 2, 3, 4]} 
d = {
    'Name': 'Niceman',
    'City': 'Seoul',
    'Age': 33,
    'Grade': 'A',
    'Status': True
}

e = dict([
    ('Name', 'Niceman'),
    ('City', 'Seoul'),
    ('Age', 33),
    ('Grade', 'A'),
    ('Status', True)
])

f = dict(
    Name = 'Niceman',
    City = 'Seoul',
    Age = 33,
    Grade = 'A',
    Status = True
)


# 딕셔너리를 선언하는 방법은 다양하다.(a, d, f형태의 방식을 가장 많이 사용함)
# 딕셔너리는 키와 벨류로 구성되며, 키는 숫자형과 문자형 모두 가능하다.
# 키만 존재한다면, 벨류에는 모든 자료형이 올 수 있다.

# 딕셔너리 e의 경우에는 dict([])의 []안에서 튜플형태로 선언을 해야한다. 
# 즉, 키와 벨류 사이를 기호 ,로 구분하며 키와 벨류를 튜플형태로 감싸야한다.


print('a - ', type(a), a)
print('b - ', type(b), b)
print('c - ', type(c), c)
print('d - ', type(d), d)
print('e - ', type(e), e)
print('f - ', type(f), f)

# 모두 <class 'dict'>의 결과 값이 출력된다.(딕셔너리 타입)




# 출력 방식

print('a - ', a['name'])

# 결과 : a -  Kim


print('a - ', a['name1'])

# 결과 : KeyError: 'name1'
# 딕셔너리에서 찾고자하는 키가 존재하지 않는 경우, 에러가 발생한다.


print('a - ', a.get('name'))

# 결과 : a -  Kim


print('a - ', a.get('name1'))

# 결과 : a -  None		
# 딕셔너리에서 찾고자하는 키가 존재하지 않는 경우, 에러는 발생하지 않으며
# 결과 값으로 None을 출력한다.

# 즉, get( ) 함수를 사용하면 찾고자하는 키가 존재하지 않아도 에러가 발생하지 않고,
# None값을 결과로 출력하기 때문에 에러 발생으로 프로그램이 중단되는 경우를 방지할 수 있다.
# 이러한 이유로 키를 통해 벨류를 출력할 때에는 get( ) 함수를 더 많이 사용한다.


print('b - ', b[0])

# 결과 : b -  Hello Python


print('b - ', b.get(0))

# 결과 : b -  Hello Python


print('f - ', f.get('City'))

# 결과 : f -  Seoul


print('f - ', f.get('Age'))

# 결과 : f -  33

 

 

  • 응용 개념
# 딕셔너리에 데이터 추가 예시

a = {'name': 'Kim', 'phone': '01042438553', 'birth': '931021'} 
b = {0: 'Hello Python'}  
c = {'arr': [1, 2, 3, 4]} 
d = {
    'Name': 'Niceman',
    'City': 'Seoul',
    'Age': 33,
    'Grade': 'A',
    'Status': True
}

e = dict([
    ('Name', 'Niceman'),
    ('City', 'Seoul'),
    ('Age', 33),
    ('Grade', 'A'),
    ('Status', True)
])

f = dict(
    Name = 'Niceman',
    City = 'Seoul',
    Age = 33,
    Grade = 'A',
    Status = True
)


a['address'] = 'seoul'
print('a - ', a)

# 딕셔너리에 데이터(seoul)를 추가하는 방식이다.
# 여기서 address는 딕셔너리의 새로운 키가 되고, seoul은 벨류가 된다.



a['name'] = 'Lee'       
print('a - ', a)

# 기존의 키(name)에 새로운 벨류(Lee)를 추가하는 방식으로 코드를 작성하면,
# 이는 데이터를 추가하는 것이 아니라 수정하는 것이 된다.
# 즉, 키 name의 벨류가 Kim에서 Lee로 수정된다.



a['rank'] = [1, 2, 3] 
print('a - ', a)

# 딕셔너리에 리스트 자료형도 데이터로 추가할 수 있다.
# 여기서 rank는 딕셔너리의 새로운 키가 되고, 리스트 [1, 2, 3]는 벨류가 된다.




# 딕셔너리의 키 관련 참고 예시

print('a - ', len(a))	# 결과 : 5
print('b - ', len(b))	# 결과 : 1
print('c - ', len(c))	# 결과 : 1
print('d - ', len(d))	# 결과 : 5

# 딕셔너리는 시퀀스형이므로, len( )함수를 사용할 수 있으며,
# len( )함수를 사용하면 딕셔너리의 키 갯수를 카운팅해서 출력할 수 있다.




# 딕셔너리의 함수 사용 예시

a = {'name': 'Kim', 'phone': '01042438553', 'birth': '931021'} 
b = {0: 'Hello Python'}  
c = {'arr': [1, 2, 3, 4]} 
d = {
    'Name': 'Niceman',
    'City': 'Seoul',
    'Age': 33,
    'Grade': 'A',
    'Status': True
}

e = dict([
    ('Name', 'Niceman'),
    ('City', 'Seoul'),
    ('Age', 33),
    ('Grade', 'A'),
    ('Status', True)
])

f = dict(
    Name = 'Niceman',
    City = 'Seoul',
    Age = 33,
    Grade = 'A',
    Status = True
)


print('a - ', a.keys())

# 결과 : a - dict_keys(['name', 'phone', 'birth', 'address'])


print('b - ', b.keys())

# 결과 : b - dict_keys([0])


print('c - ', c.keys())

# 결과 : c - dict_keys(['arr'])


print('d - ', d.keys())

# 결과 : d - dict_keys(['Name', 'City', 'Age', 'Grade', 'Status'])
# keys( ) 함수는 딕셔너리의 키만 가져온다.


print('a - ', a.values())

# 결과 :
# dict_values(['Lee', '01042438553', '931021', 'seoul', [1, 2, 3]])


print('b - ', b.values())

# 결과 : b -  dict_values(['Hello Python'])


print('c - ', c.values())

# 결과 : c -  dict_values([[1, 2, 3, 4]])


print('d - ', d.values())

# 결과 : d -  dict_values(['Niceman', 'Seoul', 33, 'A', True])
# values( ) 함수는 딕셔너리의 벨류만 가져온다.


print('a - ', a.items())
print('b - ', b.items())
print('c - ', c.items())
print('d - ', d.items())

# items( ) 함수는 딕셔너리의 키와 벨류를 둘 다 가져온다.


print('a - ', list(a.keys()))  
print('b - ', list(b.keys()))  
print('a - ', list(a.values()))  
print('b - ', list(b.values()))  
print('a - ', list(a.items()))
print('b - ', list(b.items()))

# keys( ) 함수, values( ) 함수 그리고 items( ) 함수를 통해
# 얻은 결과 값은 모두 list( ) 함수를 사용하여 형 변환을 할 수 있다.
# dict_keys, dict_values, dict_items 함수 모두 반복문에서 주로 사용된다.


print('a - ', a.pop('name'))
print('a - ', a)

# pop( ) 함수를 사용하면 키가 name인 벨류를 가져오는 동시에,
# 기존의 딕셔너리에서 해당 키와 벨류를 모두 삭제한다.


print('c - ', c.pop('arr'))
print('c - ', c)

# 위와 동일한 원리(결과 값으로 빈 딕셔너리가 출력됨)


print('f - ', f.popitem())
print('f - ', f)
print('f - ', f.popitem())
print('f - ', f)
print('f - ', f.popitem())
print('f - ', f)
print('f - ', f.popitem())
print('f - ', f)
print('f - ', f.popitem())
print('f - ', f)

# popitem( ) 함수는 딕셔너리의 키와 벨류를 무작위로 가져오며,
# 기존의 딕셔너리에서 해당 키와 벨류를 삭제한다.

# 키와 벨류를 무작위로 가져오는 이유는 딕셔너리에는 순서가 없기 때문이며,
# 더 이상 가져올 수 있는 키와 벨류가 없다면 빈 딕셔너리를 출력한다.


print('a - ', 'birth' in a)

# 결과 : a -  True
# in 연산자는 딕셔너리 안에 해당 키가 존재하는지 여부를 알려준다.
# 만약, 해당 키가 존재하면 True 값을, 없으면 False 값을 출력한다.


print('a - ', 'birth2' in a)

# 결과 : a -  False
# in 연산자를 사용해서 키를 찾을 때는 반드시 대소문자를 구분해야 하며,
# 만약, 대소문자가 다르면 키의 스펠링이 같더라도 찾지 못하고 False 값을 출력한다.




# 수정 예시

a['address'] = 'dj'
print('a - ', a)

# address 키의 벨류를 dj로 수정한다.


a.update(birth = '950321')
print('a - ', a)

# update( ) 함수를 사용하면, birth 키의 벨류를 950321로 수정할 수 있다.


temp = {'address': 'Busan'}
a.update(temp)
print('a - ', a)

# 이러한 형태로도 address 키의 벨류를 Busan으로 수정할 수 있다.

'Python' 카테고리의 다른 글

Python - if문  (0) 2021.10.14
Python - 기초 자료형(집합)  (0) 2021.10.13
Python - 기초 자료형(튜플)  (0) 2021.10.13
Python - 기초 자료형(리스트)  (0) 2021.10.13
Python - 기초 자료형(문자형)  (0) 2021.10.13

댓글