주식 자동화 프로그램을 만들기 위한 파이썬 기본 공부를 한 내용입니다.
"정의
파이썬의 하나의 자료형이다. key와 data 의 결합의 배열이라고 생각하면 쉽다. 일반 배열처럼 index(숫자) 로 이루어진 것이 아닌 숫자, 문자 모두 사용할 수 있는 key 로 구분할 수 있다. key로 구분하기 때문에 중복해서 사용할 수 없고, 데이터 또한 단순한 문자가 아닌 다양한 자료형들이 올 수 있다. 즉 문자, list, dict 형태로도 들어갈 수 있다.
기본 형식 예
var = {"카카오":035720, "네이버":035420, "넷마블":251270}
print(var)
print(type(vr)
print(var["카카오"])
#결과
{'카카오':035720, '네이버':035420, '넷마블':251270}
<class 'dict'>
035720
키에 종목명을 데이터에 종목코드를 위와 같은 형식으로 넣으면 된다.
["키값"] 을 넣고 출력하고 print를 하면 데이터(종목코드)가 나오게 된다.
기본적인 명령어로는 list(키의 리스트) , del (삭제) sorted (정렬) in(있는지 검사) 등이 있다.
사용방법 예
var = {"카카오":'035720', "네이버":'035420', "넷마블":'251270'}
keys = list(var)
print(keys)
del var["네이버"]
print(var)
isKaKao = '카카오' in var
print(isKaKao)
isKaKao = '카카오' not in var
print(isKaKao)
#결과
['카카오', '네이버', '넷마블']
{'카카오': '035720', '넷마블': '251270'}
True
False
딕셔너리는 dict라는 클래스 만들어져 있어서 아래와 같이도 입력이 가능하다.
그러나 위의 형태가 눈에 보기도 편해서 잘 안쓸것 같다.
dict([('카카오','035720'), ('네이버','035420'), ('넷마블', '251270')])
#키가 간단한 문자열일때 이렇게도 사용가능하다
dict(a=1,b=2,c=3)
키를 추가하고자 할때는
var = {"카카오":'035720', "네이버":'035420', "넷마블":'251270'}
var["삼성전자"] = '005930'
print(var)
#결과
{'카카오': '035720', '네이버': '035420', '넷마블': '251270', '삼성전자': '005930'}
list() 말고 키 값을 가져오는 함수로는 keys()가 있는데 이건 주소값을 가지고 있기 때문에 나중에 값이 추가가 되어도 keys() 로 리턴 받은 변수 값은 같이 변경이 된다. values() 는 키를 제외한 값만 가져옵니다.
var = {"카카오":'035720', "네이버":'035420', "넷마블":'251270'}
keys = var.keys()
print(keys)
var["삼성전자"] = '005930'
print(var)
print(keys)
#결과
dict_keys(['카카오', '네이버', '넷마블'])
{'카카오': '035720', '네이버': '035420', '넷마블': '251270', '삼성전자': '005930'}
dict_keys(['카카오', '네이버', '넷마블', '삼성전자'])
이중 딕셔너리
딕셔너리 안에 딕셔너리 넣기.
위와 같은 방법으로는 한개의 데이터 밖에 넣지 못하기 때문에 여러개를 넣을때 사용하는 법.
내 주식 잔고 데이터를 가져온다는 가정하에.
kakao_pocket = {"종목코드":'035720', "현재가":121000, "평균매입가":100000, "수량":10}
pocket = {"카카오":kakao_pocket}
print(pocket)
#결과
{'카카오': {'종목코드': '035720', '현재가': 121000, '평균매입가': 100000, '수량': 10}}
이런 형태로 들어가게 됩니다.
kakao_pocket = {"종목코드":'035720', "현재가":121000, "평균매입가":100000, "수량":10}
pocket = {"카카오":kakao_pocket}
print(pocket)
pocket["카카오"]["평가금액"] = 1210000 #한개만
pocket["카카오"].update({"수량":11, "평가손익":210000}) #여러개
print(kakao_pocket)
print(pocket)
#결과
{'카카오': {'종목코드': '035720', '현재가': 121000, '평균매입가': 100000, '수량': 10}}
{'종목코드': '035720', '현재가': 121000, '평균매입가': 100000, '수량': 11, '평가금액': 1210000, '평가손익': 210000}
{'카카오': {'종목코드': '035720', '현재가': 121000, '평균매입가': 100000, '수량': 11, '평가금액': 1210000, '평가손익': 210000}}
이렇게 보시면 pocket에 데이터를 넣어도 kakao_pocket 까지 같이 업데이트가 된걸 볼 수 있습니다. 이것도 주소값을 가지고 있다는 말입니다.
pocket = {
"카카오":{"종목코드":'035720', "현재가":121000},
"네이버":{"종목코드":'035420', "현재가":377000}
}
print(pocket)
#결과
{'카카오': {'종목코드': '035720', '현재가': 121000}, '네이버': {'종목코드': '035420', '현재가': 377000}}
당연히 이렇게 여러개도 됩니다.
이러한 자료형 구조는 많이 쓰이기 때문에 구조를 머리속으로 바로 그려지도록 익히면 좋습니다.
본 글은 아래의 문서를 참고하여 공부한 내용을 정리 하였습니다.
https://docs.python.org/ko/3.9/tutorial/datastructures.html#dictionaries