본문 바로가기
파이썬/주식 자동매매

Python 키움API 자동매매프로그램 개발-9.Python 기초편 딕셔너리 사용

by 행복론자 2021. 1. 24.

시리즈 이전글입니다.

2021/01/22 - [파이썬/주식 자동매매] - Python 키움API 주식자동매매프로그램 개발 - 8.Python 기초편 튜플, 리스트 사용 패킹 언패킹

 

 

지금까지 배운 문자열, 튜플, 리스트는 데이터를 일렬로 나열하는 시퀀스 자료형이었습니다. 

samsung_closes_tuple = (40000, 45000, 50000, 55000, 60000, 60500, 61000, 67000, 76000, 80000, 82000, 83000)

samsung_closes_list = [40000, 45000, 50000, 55000, 60000, 60500, 61000, 67000, 76000, 80000, 82000, 83000]

 

 

하지만 여기서 각각 40000, 45000, 그리고 50000와 같은 데이터들을 보고 이게 정확히 무엇을 의미하는지는 파악하기 어려울 수 있습니다.

예를 들어 삼성전자의 당일 시가, 종가, 고가, 저가, 거래량을 담은 리스트를 만들어보겠습니다. 

samsung = [40000, 40100, 40500, 39000, 1000000]

 

 

우리는 이 각각의 숫자들이 무엇을 의미하는지 설명하고 변수를 선언했지만 만약 이를 처음 보는 사람이 있다면 별도의 설명 없이 각 숫자들이 무엇을 의미하는지 이해하기 어렵습니다.

여기서 딕셔너리(Dictionary)라는 데이터 타입이 필요할 수 있습니다.

딕셔너리는 Key - Value 형태의 데이터로 고유한 키(Key)에 해당하는 값(Value)을 저장할 수 있습니다. 

위 예에서 시가, 종가, 고가, 거래량이 키가 되고 각각의 숫자들이 값이 되는 딕셔너리를 만들어보겠습니다. 

samsung = {'시가': 40000, '종가': 40100, '고가': 40500, '저가': 39000, '거래량': 1000000}

 

문법을 살펴보면 튜플은 ()을 이용해 만들었고 리스트는 []을 이용했습니다.

딕셔너리는 {}을 사용하며 

그 안에는 다음과 같은 방식으로 Key-Value를 작성합니다. 

딕셔너리 = {Key : Value , Key : Value, …}

 

그러면 이렇게 만든 딕셔너리의 값(Value)에 접근하는 방식은 다음과 같습니다.

딕셔너리[Key]
samsung['시가']  # 40000
samsung['저가']  # 39000

 

 

이렇게 딕셔너리에 들어있는 고유한 Key를 바탕으로 Value에 접근할 수는 있어도 반대로 Value를 통해 바로 Key에 접근하는 문법은 따로 존재하지 않습니다.

(Key는 고유한 값지만 Value는 고유하지 않습니다.)

 

하지만 그렇다고 동일한 Key를 아예 사용하지 못하는 것은 아닙니다. 

다음처럼 ‘저가’라는 Key를 두번 사용해보겠습니다. 

samsung = {'시가': 40000, '종가': 40100, '고가': 40500, '저가': 39000, '거래량': 1000000,  '저가': 38000}

 

그럼  samsung 딕셔너리에서 ‘저가’ Key에 저장된 값은 무엇일까요?

한번 확인해보겠습니다.

samsung['저가']  # 38000

 

 

마지막에 선언한 Value인 38000이 저장되어 있습니다.

동일한 Key를 사용한 경우 마지막에 사용한 Key의 Value가 저장됨을 알 수 있습니다.

딕셔너리 전체를 출력해보려면 다음처럼 코드를 작성하면 됩니다. 

print(samsung)

 

 

그러면 딕셔너리 전체에 값이 나옵니다. 

'''
{'시가': 40000, '저가': 38000, '종가': 40100, '거래량': 1000000, '고가': 40500}
'''

 

 

딕셔너리를 만들 때는 다양한 데이터 타입의 Key와 Value가 가능합니다.

예를 들어 보겠습니다. 

test_dict = {0: '1', '0': '2', True: False, 'list': [1, 2, 3]}
print(test_dict[0])
print(test_dict['0'])
print(test_dict[True])
print(test_dict['list'])

 

test_dict이라는 딕셔너리를 보면 Key값으로 숫자, 문자, 논리형(True, False)를 사용했습니다. 이렇게 다양한 데이터 타입의 Key와 Value를 사용해 딕셔너리를 만들 수 있습니다.

하지만 리스트나 튜플을 Value로 사용할 수는 있지만 반대로 Key로 사용할 수 없다는 것을 기억하시기 바랍니다. 

test_dict = {[1, 2, 3]:[1, 2, 3]}

 

다음으로는 딕셔너리에 데이터를 삽입, 삭제, 수정하는 방법에 대해서 알아보겠습니다. 

먼저 비어있는 딕셔너리를 선언하려면 다음처럼 {}만 사용하고 그 안에 아무 값도 넣지 않으면 됩니다. 한번 만들어보겠습니다.

test_dict = {}

 

 

이 상태에서 Key-Value를 새로 만들고 싶다면 다음처럼 바로 Key에 접근해서 Value를 할당하면 됩니다. 

test_dict['test'] = 1
test_dict['test']  # 1 

 

 

‘test’라는 Key는 원래 없던 값이었지만 접근함과 동시에 값을 할당하면 이후 사용할 수 있습니다. 하지만 반대로 원래 없던 Key에 값을 할당하지 않으면서 바로 접근하려면

없는 Key라는 에러가 발생합니다. 

test_dict['test']  # KeyError: 'test'

 

딕셔너리의 값을 수정하는 방법은 리스트에서 값을 수정했던 방법과 동일합니다. 

수정하고자 하는 값이 있는 Key에 접근해 다음처럼 수정해주면 됩니다. 

test_dict['test'] = 1
test_dict['test']  # 기존값 : 1

test_dict['test'] = 1111111
test_dict['test']  # 수정값 : 1111111

 

 

마지막으로 딕셔너리 Key에 관해 조금 더 알아보도록 하겠습니다.

딕셔너리를 사용하며 존재하지 않는 Key에 접근할 경우 에러가 발생한다고 말씀 드렸습니다.

samsung = {'시가': 40000, '종가': 40100, '고가': 40500, '저가': 39000, '거래량': 1000000,  '저가': 38000}

samsung['52주최고가'] # KeyError 발생

 

 

딕셔너리 안에 Key가 있는지 없는지 몰라서 에러가 발생하지 않도록 내가 사용할 키가 딕셔너리에 있는지 알아보려면 다음과 같은 코드를 사용합니다.

조회할 Key in 딕셔너리 

 

그럼 바로 위의 예는 다음과 같이 확인해볼 수 있습니다. 

'52주최고가' in samsung

 

이렇게 코드를 만들면 Python에서는 ‘52주최고가’ 라는 Key가 samsung 딕셔너리에 있는지 없는지를 확인한 후 결과를 참, 거짓(True, False)을 의미하는 bool 자료형으로 반환합니다. 

저 코드를 단순히 Pycharm에서 실행해보면 결과를 알 수 없기에 출력해보겠습니다. 

print('52주최고가' in samsung)
# False

 

 

False(틀림)가 나오는 것으로 봐서  ‘52주최고가’라는 Key가 samsung에 없는 것임을 알 수 있습니다.

반대로 존재하는 Key를 넣었을 경우는 다음처럼 True가 나오는 것을 확인할 수 있습니다. 

print('시가' in samsung)

# True

 

그러면 딕셔너리가 가지고 있는 Key 또는 Value 데이터를 구분지어 보려면 어떻게 해야할까요?

딕셔너리 타입의 변수는 기본적으로 .keys() 혹은 .values()라는 기본함수를 가지고 있어서 Key, Value를 각각 구분지어 볼 수 있습니다.

samsung = {'시가': 40000, '종가': 40100, '고가': 40500, '저가': 39000, '거래량': 1000000,  '저가': 38000}

print(samsung.keys())
print(samsung.values())

 

 

samsung.keys()를 통해 Key값들만 모아놓은 값들을 추출할 수 있고

samsung.values()를 통해 Value값들만 모아놓은 값들을 추출할 수 있습니다. 

dict_keys(['고가', '종가', '저가', '시가', '거래량'])
dict_values([40500, 40100, 38000, 40000, 1000000])

 

여기서 dict_keys, dict_values는 리스트와 비슷하게 생겼지만 엄밀히 말해 리스트는 아니기에 리스트가 제공하는 함수들(append 등)을 사용할 수는 없습니다.

하지만 우리가 배우지는 않았으나 리스트 생성방법 중 리스트로 만들 대상을 list()로 감싸는 방법을 이용해 리스트로 변환할 수는 있습니다.

print(list(samsung.keys()))
print(list(samsung.values()))

 

실행해보면 다음과 같이 리스트로 변환된 것을 알 수 있습니다. 

['고가', '저가', '시가', '종가', '거래량']
[40500, 380000, 40000, 40100, 1000000]

 

지금까지 Python 자료형에 대해서 배웠습니다. Python을 배우면서 꽤 어려울 수 있는 부분이었기에 아직 튜플, 리스트, 딕셔너리가 뭐가 뭔지 그리고 만드는 법, 사용하는 법 헤깔리실 수 있습니다.

그럴 경우에는 코드를 눈으로만 보기 보다는 Pycharm을 켜서 직접 예시 코드를 붙여넣고 이리저리 수정하면서 ‘이게 될까?’ 하는 부분들을 직접 코딩해서 확인해보시는 것을 추천 드립니다. 고생하셨습니다.

 


같이 보시면 좋을 글

2021/02/10 - [파이썬/주식 자동매매] - 주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

 

주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.

주식매매프로그램 개발 노하우에 관한 제 전자책이 발간되었습니다. https://kmong.com/gig/292764 주식매매프로그램, 쉽게 따라 만드는 노하우와 소스를 드립니다. | 36000원부터 시작 가능한 총 평 0개

jsp-dev.tistory.com

 

2021/01/25 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-10.Python 기초편 연산기초

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글