티스토리 뷰

📌 {딕셔너리}

연관성이 없는 값을 일렬로 늘어놓은 형태인 리스트, 튜플과 다르게 딕셔너리는 행과 열을 가지며 값 사이에 연관성이 존재한다. 데이터(value)마다 이름(key)을 붙여서 저장하는 방식을 사용한다. key와 value를 한 쌍으로 묶어 요소 하나로 본다.

 

📍  데이터 형에 상관없이 여러 값을 저장할 수 있다 = 모든 객체의 시퀀스.

📍  key(불변)와 value(가변)가 한 쌍을 이루어 딕셔너리의 요소 하나가 된다.

📍  key는 문자열뿐만 아니라 정수, 실수, 불도 사용할 수 있다. 하나의 데이터형으로 통일할 필요는 없다.

📍  단, key에 리스트와 딕셔너리를 사용할 수 없다. key는 불변 값이므로 튜플만 가능하다.

📍  key를 사용한 탐색이 가능하므로 탐색에 용이하다.

📍  2차원 배열의 형태를 가진다.

📍  첨자를 사용해 리스트에 저장된 값에 접근할 수 있다 (리스트 길이보다 큰 index를 사용하려고 하면 에러 발생)

 


👉  딕셔너리 만들기 (딕셔너리 패킹)

1.  중괄호 사용하기

student = { 'class' : '20', 'name': '짱구', 'age': 5, 'class' : '해바라기반' }

print(student)
print(student['class'])

✔  {딕셔너리}에 값을 저장할 때에는 중괄호로 묶어준다.

✔  만약 중복 key가 있다면 나중에 선언된 key-value를 사용할 수 있고, index는 첫 번째 선언된 위치를 사용한다.

✔  중복 key가 있다면 이래저래 헷갈리니까 key 이름을 지어줄 때에 중복되지 않도록 주의하자. 

student = { 'name': '짱구', 'age': 5, 'class' : '해바라기반' }

student['name'] = '치타'
student['age'] = 6
student['class'] = '장미반'
student['teacher'] = '나미리선생님'

print(student)

✔  첨자를 사용해서 요소에 접근하고, 만약 없는 key값을 사용하면 딕셔너리에 요소가 추가된다.


2. 형변환을 위한 dict() 사용하기

1. 딕셔너리 = dict(키1=값1, 키2=값2)
2. 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
3. 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
4. 딕셔너리 = dict({키1: 값1, 키2: 값2})

✔  형변환을 위한 dict()를 사용해서 딕셔너리를 만들 수 있다. 하나하나 살펴보자.

# 1. 딕셔너리 = dict(키1=값1, 키2=값2)

dic = dict(name='짱구', age=5)

✔  key = value 형식으로 딕셔너리를 만들 수 있다.

✔  이 때에는 key값에 따옴표를 사용하지 않아야 하며, 무조건 문자열로 변환된다.

# 2. 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))

dic = dict( zip( ['name', 'age'], ['짱구', 5]  ) )

k = ('name', 'age')
v = ['짱구', 5]
dic = dict( zip(k,v) )

✔  zip() 을 활용해서 만들 수 있다.

✔  zip은 인자로 key값을 요소로 가지는 리스트와, value값을 요소로 가지는 리스트를 받는다.

✔  리스트가 아닌 튜플을 인자로 넣어도 정상 작동한다.

✔  만약 key을 요소로 가지는 리스트나 튜플만을 넣어 인수를 하나만 사용하면 오류 발생한다.

# 3. 딕셔너리 = dict([(키1, 값1), (키2, 값2)])

k = ('name', 'age')
v = ['짱구', 5]

dic1 = dict( [ k,v ] )
dic2 = dict( ( k,v ) )

✔  zip() 대신 리스트나 튜플로 묶어서 딕셔너리를 만들 수도 있다.

# 4. 딕셔너리 = dict({키1: 값1, 키2: 값2})

dic = dict( { 'name':'짱구', 'age':5  } )

✔  마지막으로 dict 내부에서 중괄호를 사용해 딕셔너리를 생성하는 방법이다.

✔  이럴 바에는 그냥 딕셔너리 만드는게 낫겠다 싶은 생각이 든다 🤔


3.  빈 딕셔너리 만들기

dic1 = {}
dic2 = dict()

✔  중괄호를 비우거나, 형변환을 돕는 dict()을 사용해서 빈 딕셔너리를 만들 수 있다.

 

👉  딕셔너리 언패킹 (추가 예정)

#딕셔너리 언패킹

 

👉 딕셔너리를 조작하는 메서드

  메서드 설명
추가 .setdefault(k)
   딕셔너리에 key-value 를 추가
   key만 지정하면, value에 NONE 이 저장.
추가/수정 .update(k=v)    key 값 수정, key가 없다면 key-value 추가.
   요소 여러개를 한번에 수정/추가할 수 있다.
삭제 .pop(k)    특정 요소를 삭제하고, 삭제한 value를 반환
   저장되어 있지 않은 key값이라면 error
del 딕셔너리['k']    해당하는 key 삭제
.popitem()    파이썬 3.6이상 : 마지막 요소를 삭제
   파이썬 3.5이하 : 임의로 요소 하나를 선택해서 삭제
.clear()    딕셔너리의 모든 요소 삭제
검색 .get(k)    딕셔너리의 특정 key값을 사용해 value를 가져온다
.items()    딕셔너리의 모든 key-value를 가져온다
.keys()    딕셔너리의 모든 key를 가져온다
.values()    딕셔너리의 모든 value를 가져온다
정렬
sorted(딕셔너리)    딕셔너리 요소가 인수를 기준으로 정렬 (오름차순)
   요소를 오름차순으로 정렬 (정렬된 새로운 리스트를 반환)
길이 len(리스트)    길이 (요소의 개수) 구하기
   딕셔너리의 요소는 key-value 한 쌍을 의미

 

👉 딕셔너리 : 추가 메서드

1. setdefault()

dic = { 'one':1 , 'two':2 , 'three':3 }

#1. dic 출력
print('1. ',dic)

#2. 요소 추가 후 dic 출력
dic.setdefault('four')
print('2. ',dic)

✔  setdefulat()의 인수로 key값을 넣어주면 None으로 자동 할당되어 요소가 추가된다.


2. update()

dic = { 'one':1 , 'two':2 , 'three':3 }

#1. dic 출력
print('1. ',dic)

#2. 요소 수정 후 dic 출력
dic.update(one='1')
print('2. ',dic)

#3. 요소 수정 후 dic 출력
dic.update(four= 4)
print('3. ',dic)

✔  update의 인수로 key값을 사용할 때에는 문자열이어도 따옴표가 필요하지 않다.

✔  딕셔너리에 key값이 있다면 value를 수정하고, 없다면 새롭게 추가한다.

 

👉 딕셔너리 : 삭제 메서드

1. pop()

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. dic.pop()의 결과 : error
# dic.pop()
# print('2. ',dic)
print('2. error')

# 3. dic.pop(key)의 결과 : key값을 찾아 삭제
dic.pop('one')
print('3. ',dic)

✔  pop() 은 특정 key를 지정해 삭제한다


2. del 리스트['key']

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. del dic['two']의 결과
del dic['two']
print('2. ',dic)

✔  내장 함수 del 역시 특정 key를 지정해 삭제한다


3. popitem()

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. dic.popitem() 의 결과
dic.popitem() 
print('2. ',dic)

✔  파이썬 3.6이상 : 마지막 요소를 삭제한다
✔  파이썬 3.5이하 : 임의로 요소 하나를 선택해서 삭제한다


4. clear()

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. dic.clear() 의 결과
dic.clear() 
print('2. ',dic)

✔  딕셔너리 내부의 모든 요소를 삭제한다.

 

👉 딕셔너리 : 검색 메서드

1. get()

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. dic.get('one') 결과 출력
print('2. ',dic.get('one'))

# 3. dic.get('four') 결과 출력
print('3. ',dic.get('four'))

✔  get() 메서드는 key값에 해당하는 value를 반환한다.

✔  딕셔너리가 가지지 않은 key값을 사용하면 None을 반환한다.


2. items() , keys(), values()

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. dic.items() 결과 출력
print('2. ',dic.items())

# 3. dic.keys() 결과 출력
print('3. ',dic.keys())

# 4. dic.values() 결과 출력
print('4. ',dic.values())

✔  items() 는 딕셔너리의 모든 key-value를 가져온다.

✔  keys()는 딕셔너리의 모든 key를, values()는 모든 value를 가져온다.

 

👉 딕셔너리 : 정렬 메서드

1. sorted()

dic = {'b':3, 'a':2, 'c':1}
print('>',dic)

sorted_dic2 = sorted(dic)
print('> 딕셔너리명\t\t\t\t: ',sorted_dic2)

sorted_items = sorted(dic.items())
print('> 딕셔너리.items()\t\t\t: ',sorted_items)

sorted_items = sorted(dic.items(), reverse=True)
print('> 딕셔너리.items() + (reversee=True)\t: ',sorted_items)

sorted_values = sorted(dic.values())
print('> 딕셔너리.values()\t\t\t: ',sorted_values)

sorted_keys = sorted(dic.keys())
print('> 딕셔너리.keys()\t\t\t: ',sorted_keys)

✔  내장 함수 sorted 는 정렬을 한 뒤, 새로운 딕셔너리를 생성한다. 저장하지 않으면 사용할 수 없다.

✔  딕셔너리에 sorted를 사용하면 요소가 정렬된 리스트를 반환한다.

✔  리스트를 다시 딕셔너리로 형변환하는 방법은 따로 다룰 예정.

 

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

1. key in 딕셔너리

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. 'one' in dic 결과 출력
print('2. ','one' in dic)

# 3. 'four' in dic 결과 출력
print('3. ','four' in dic)

✔  딕셔너리가 가지고 있는 key값이라면 True를 반환하고, 아니라면 False를 반환한다.

# 1. dic 출력
dic = { 'one':1 , 'two':2 , 'three':3 }
print('1. ',dic)

# 2. 'one' not in dic 결과 출력
print('2. ','one' not in dic)

# 3. 'four' not in dic 결과 출력
print('3. ','four' not in dic)

✔  in 앞에 not을 붙이면 특정 key가 없는지 확인할 수 있다.

 

👉 리스트 : 반복문에서 사용하기

num = {1:'one', 2:'two', 3:'three', 4:'four'}
print(num)

#key를 사용 
for key in num.keys() :
	print('key : {0} → value : {1}'.format(key,num[key]))

#value를 사용
print()
for value in num.values() :
	print('value : {}'.format(value))
    
#key-value를 사용
print()
for key, value in num.items() :
	print('key : {0} → value : {1}'.format(key,value))

 

 

 

 

 

[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과

댓글
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday