Study Record

[파이썬] 딕셔너리(JSON) 본문

서버보안/리눅스 서버보안

[파이썬] 딕셔너리(JSON)

초코초코초코 2021. 11. 24. 15:21
728x90

딕셔너리 특징

  • 딕셔너리 객체는 넣은 순서대로 저장되지 않는다. 따라서, 검색할 때 속도가 좋다.
  • 딕셔너리 자료형은 해싱 기법을 이용하기 때문에 자료가 순서대로 저장되지 않는다.(딕셔너리는 해시 테이블 형식의 일종이다.)
  • 키(key) & 값(value) 쌍의 형태로 구성된다.
  • 키(key)는 문자열, 숫자가 주로 사용되고, 값(value)은 모든 유형과 임의의 파이썬 객체일수 있다.
  • 키(key)는 중복될 수 없지만 값(value)은 중복될 수 있다.
  • key 값은 변하지 않는 값을 사용하고, value 값은 변하는값과 변하지 않는 값 모두 사용 가능하다.
  • 딕셔너리는 index 기능이 없는 대신 key 값으로 검색할 수 있다.
  • 조인(join) 할 수 없다. 따라서, '+' 기호 사용하는 방법을 택해야 한다.

 

☞ 딕셔너리 사용 형식

dic = {}		                   # 비어 있는 딕셔너리(dict) 선언
dic = { 'key1': 'value1', 'key2': 'value2' }
dic = { 'key1': ['value1', 'value2']}    # 딕션너리에 리스트 요소를 넣을 수 있다. 
dic = { 'key1': {'key2': 'value2'}}      # 딕셔너리에 딕셔너리 요소를 넣을 수 있다.
dic = { 'key1': ('value1', 'value2') }		# 딕셔너리에 튜플 요소를 넣을 수 있다.

 

☞ 딕셔너리 기본 사용법 - keys(), values(), get(key)

a = {"Hello": "welcome", "Python": "Good"}

print(a.keys())			# dict_keys(['Hello', 'Python']) : 키를 출력한다.
print(a.values())		# dict_values(['welcome', 'Good']) : value을 출력한다.
print(a.get("Hello"))		# "welcome" : 키값이 "Hello" 인 value 값을 얻는다.
print(a["Hello"])		# "welcome" : 키값이 "Hello" 인 value 값을 얻는다.
print(a.get("sss", "none"))	# "none" : "sss" 라는 키가 존재하지 않으므로 default 값인 none 출력

# 사용 예시
for i in a.items():
	# ('Hello', 'welcome')
	print(i)
    
for key, value in a.items():
	# key = 'Hello' , value = 'welcome'
	print(key, value)
    
for i in a.keys():
	# i = 'Hello' or 'Python' - 키값이 들어감
	print(a.get(i))
    
# python 2.x
print(a.keys())			# ['Hello', 'Python'] : 리스트로 출력된다.

 

딕셔너리, list, tuple 변환 - list(), tuple(), zip()

a = {"Hello": "welcome", "Python": "Good"}

print(list(a.keys()))			# ['Hello', 'Python']
print(tuple(a.values()))		# ('welcome', 'Good')

# 딕션어리로 전환 
alpha = ['a', 'b', 'c']
number = [1, 2, 3]
dict(zip(alpha, number))		# {'a': 1, 'b': 2, 'c': 3}

 

☞ 딕셔너리 요소 추가

a = {1: 'a'}
a[2] = 'b'		# {1: 'a', 2: 'b'}
a['name'] = 'pey'	# {1: 'a', 2: 'b', 'name': 'pey'}
a[3] = [1, 2, 3]	# {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}

 

☞ 딕셔너리 요소 삭제

a = {1: 'name', 2: 'id' , 3: 'pass', 'a': 'Wow!'}
del a[1]	# {2: 'id', 3: 'pass', 'a': 'Wow!'}
del a[2]	# {3: 'pass', 'a': 'Wow!'}
a.clear()	# {} : 전체 삭제

del a		# a 자체가 사라진다. 정의되지 않음

 

in

a = {1: 'name', 2: 'id' , 3: 'pass', 'a': 'Wow!'}
'name' in a		# 키값을 본다. a 에 'name' 이라는 키가 있으면 true

 

한꺼번에 업데이트하기

a = {'kim':'010-1111-1111', 'Lee':'010-2222-2222', 'Park':'010-3333-3333'}
a.update({'Baik':'010-8815-6754', 'Park':'010-4444-4444'})

"""
a = {'kim': '010-1111-1111', 'Lee': '010-2222-2222', 'Park': '010-4444-4444', 'Baik': '010-8815-6754'}
"""

 

※ 추가 응용

a = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}
#	(질문) value가 '4'인 키를 찾고 싶다. => 'four'

# 풀이1
result = [key for key, value in a.items() if value == 4]
print(result)

# 풀이2
result = dict({(k,v) for (k,v) in a.items() if v == 4})
print(result)

# 풀이3
result = []
for k, v in a.items():
	if v == 4:
    	result.append(k)
print(result)

 

※ 딕셔너리 키와 값 서로 바꾸기

a = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}
reverse_a = dict({(v,k) for (k,v) in a.items()})

# a 		= {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5} 
# reverse_a	= {3: 'three', 2: 'two', 4: 'four', 1: 'one', 5: 'five'}

 

[참고] comprehension

(초급) https://mingrammer.com/introduce-comprehension-of-python/

(중급) https://mingrammer.com/translation-iterators-vs-generators/ 

728x90