dictionary
set 와 마찬가지로 순서대로 데이터를 보관하지 않는다. 다만 key-value 의 형태로 이루어져있기 때문에 key 를 통하여 원하는 값을 출력할 수 있다. set 처럼 key 를 해시값으로 저장하기 때문에 key 는 중복될 수 없다.
중첩하여 사용할수도 있다.
# dictionary create 1
# 데이터가 주어지거나 딕셔너리의 내용이 고정되어 있는 경우 사용된다
dictionary1 = {'name':['Ryan','Lee'],
'job':'sw engineer',
'address': {'city':'seoul', 'zip_code':'1234'} }
# dictionary create 2
# 변수를 선언해놓고 데이터 베이스를 조회해서 필요한 정보를 동적으로 채워야 할때 사용된다
dictionary2 = {}
dictionary2['name'] = ['Ryan', 'Lee']
dictionary2['job'] = 'sw engineer'
dictionary2['address'] = {'city':'seoul', 'zip_code':'1234'}
# dictionary create 3
# 숫자로 딕셔너리의 키로 사용할 수 있지만 문자열만 키로 사용되는 경우 사용된다
dictionary3 = dict(
name=['Ryan','Lee'],
job='sw engineer',
address={'city':'seoul','zip_code':'1234'})
# dictionary create 4
# 튜플로 받아온 정보로 키와 값을 만들어야 할 경우에 사용된다
dictionary4 = dict(
[('name',['Ryan','Lee']),
('job','sw enginner'),
('address',{'city':'seoul','zip_code':'1234'})
])
"""위의 예제에서 name키에서 'Ryan' 과 'Lee'를 각각 가져와보고 출력해보고,
address키에서 'seoul'과 zipcode '1234' 를 가져와서 출력보세요."""
print('dictionary1 name :', dictionary1['name'][0],dictionary1['name'][1])
print('dictionary1 address:', dictionary1['address']['city'],dictionary1['address']['zip_code'])
hash
해시hash 란 데이터를 다루는 기법 중 하나이다. 해시 함수는 임의의 길이를 가진 데이터를 고정된 길이의 데이터로 mapping 하는 함수로, 원래의 데이터 값을 key, mapping 후의 데이터 값을 value 또는 hash code 라고 한다.
해시함수는 단방향 암호화에 많이 사용되는데, 입력 데이터를 변환하여 원본 데이터로 복호화 할 수 없도록 한다. SHA 함수를 이용하는 경우가 많다. 이전에 프로젝트때 사용했던 HS256 알고리즘 또한 SHA-256을 이용한 알고리즘으로, 적어도 32 bytes 이상의 secret key 사용하여 256bit의 digest 를 생성한다.
import bcrypt
password = '1234'
encoded_password = password.encode('utf-8')
hashed_password = bcrypt.hashpw(encoded_password, bcrypt.gensalt())
print(hashed_password)
hash table
hash table 이란 dictionary 와 마찬가지로 key 와 value 로 이루어진 데이터 구조를 의미한다. 배열로 미리 hash table 만큼의 공간을 생성하여 사용하므로 저장 공간을 많이 사용하지만 데이터의 저장이나 검색이 쉬워, 해당 기능을 많이 사용할 때 hash 를 이용하면 좋다.
해시 테이블은 key 값을 해시 함수로 계산하여 배열의 인덱스로 사용한다.
다만 아래의 이미지처럼
같은 인덱스를 가진 값들이 충돌collision할 수 있다. 이런 경우 linked list 등을 이용하여 연결해주는 chaining 기법을 사용해야 한다. 이렇게 연결시킬 경우 한정된 저장소를 효율적으로 사용할 수 있다는 장점이 있지만, 검색 효율이 떨어지고 외부 저장 공간에 대한 작업을 추가로 해야 한다는 단점이 있다.
'python' 카테고리의 다른 글
tree (0) | 2021.04.27 |
---|---|
stack & queue (0) | 2021.04.27 |
array & tuple & set (0) | 2021.04.27 |
args & kwargs (0) | 2021.04.27 |
set (0) | 2021.04.27 |