파이썬

딕셔너리 - 컬렉션 타입

96__혀누 2024. 3. 14. 16:35

딕셔너리 ( dic )

키 ( key ) 와 값 ( value )쌍을 저장하는 컬렉션 타입이며, 요소의 변경이 가능하다.
중괄호 { }를 사용하여 생성하고, 키-값 쌍들은 쉼표 ,로 구분됩니다. 각 키-값 쌍은 콜론 :으로 구분됩니다.
{ key : value }

다만, 키 ( key )값은 set 타입으로 중복이 불가능하다.

# key값은  중복이 불가능하다, key 값은 set 타입으로 이루어져있다.
dic2 = {1:'김사과', 2:'바나나', 3:'오렌지', 4:'이메론'}
print(dic2)
print(type(dic2))

>>
{1: '김사과', 2: '바나나', 3: '오렌지', 4: '이메론'}
<class 'dict'>

 

인덱싱이 가능하다.

 

dic2 = {1:'김사과', 2:'바나나', 3:'오렌지', 4:'이메론'}

print(dic2[2])
print(dic2[4])

>>
바나나
이메론
# 키값으로 해당 value 값을 확인할 수 있다.

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3)
print(dic3['no'])
print(dic3['name'])

>>
{'no': 1, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
1
김사과

 

데이터의 수정, 추가, 삭제가 가능하다.

 

dic1 = {1:'apple'}
print(dic1)

# 추가 : [ 추가할 key 값 ] = 추가할 value 값

dic1[100] = 'banana' 
print(dic1)
dic1[50] = 'orange'
print(dic1)


# 수정
# key 값은 중복되지 않기 때문에, 같은 key값의 데이터를 추가할 경우, 기존 요소가 변경된다.

dic1[100] = 'melon'
print(dic1)


# 삭제 : del [ 삭제할 key 값 ]

del dic1[100]
print(dic1)

>>
{1: 'apple'}
{1: 'apple', 100: 'banana'}
{1: 'apple', 100: 'banana', 50: 'orange'}
{1: 'apple', 100: 'melon', 50: 'orange'}
{1: 'apple', 50: 'orange'}

 

키 ( key )값은 변경이 불가능하다. ( set 타입 )

 

딕셔너리의 키는 변경 불가능한(immutable) 타입이어야 합니다. 예를 들어, 문자열, 정수, 튜플은 딕셔너리의 키로 사용할 수 있지만, 리스트는 딕셔너리의 키로 사용할 수 없습니다. 하지만 딕셔너리의 값은 어떤 타입이든 상관없습니다.

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3)

dic3['no'] = 10
print(dic3)

dic3['gender'] = 'female'
print(dic3)

# value 값에 리스트 타입을 추가할 수 있다.
dic3['점수'] = [90, 100, 50]
print(dic3)

# key 값엔 리스트가 들어갈 수 없다. TypeError: unhashable type: 'list'
# dic3[[1, 2, 3]] = ['하나', '둘', '셋']
# print(dic3)

# key 값에 튜플을 사용할 수 있다.
dic3[(1, 2, 3)] = ['하나', '둘', '셋']
print(dic3)

# value 값에 딕셔너리를 추가할 수 있다.
dic3['과일'] = {'사과' : '🍎', '딸기':'🍓', '수박':'🍉'}
print(dic3)

>>
{'no': 1, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
{'no': 10, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
{'no': 10, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111', 'gender': 'female'}
{'no': 10, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111', 'gender': 'female', '점수': [90, 100, 50]}
{'no': 10, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111', 'gender': 'female', '점수': [90, 100, 50], (1, 2, 3): ['하나', '둘', '셋']}
{'no': 10, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111', 'gender': 'female', '점수': [90, 100, 50], (1, 2, 3): ['하나', '둘', '셋'], '과일': {'사과': '🍎', '딸기': '🍓', '수박': '🍉'}}

 


딕셔너리의 함수와 메서드

 

len() : 요소들의 갯수를 반환

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

print(len(dic3))

>> 4

keys() : 딕셔너리의 모든 "키"를 반환

print(dic3.keys())

>> dict_keys(['no', 'userid', 'name', 'hp'])

values() : 딕셔너리의 모든 "값"을 반환

print(dic3.values())

>> dict_values([1, 'apple', '김사과', '010-1111-1111'])

items() : 딕셔너리의 모든 키와 값을 쌍(튜플)로 반환

print(dic3.items())

>> dict_items([('no', 1), ('userid', 'apple'), ('name', '김사과'), ('hp', '010-1111-1111')])

get() : 특정 키의 값을 반환한다. 만약 해당 키가 딕셔너리에 없으면, None을 반환한다.

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3['userid'])
# 없는 key를 입력 시 오류 KeyError: 'age'

# None을 대신하여 특정 값을 설정하여 출력할 수 있음
print(dic3.get('userid'))
print(dic3.get('age'))  # 해당 key가 없을 시, None

print(dic3.get('age', '나이를 알 수 없음'))  # 해당 key가 없을 시, 매세지를 수정하여 출력할 수 있음

>>
apple
apple
None
나이를 알 수 없음

pop() : 특정 키의 value를 반환한다.( value 값만 반환 ) 특정 key가 없다면 에러 발생

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

temp = dic3.pop('hp')
print(dic3)
print(temp)
print(type(temp))

>>
{'no': 1, 'userid': 'apple', 'name': '김사과'}
010-1111-1111
<class 'str'>

in : 해당 딕셔너리에 특정 키가 있는지 확인한다.

dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

print('hp' in dic3)
print('age' in dic3)

>>
True
False