Language/Python / / 2021. 4. 28. 09:19

Dictionary - 딕셔너리

반응형

 

 

주식 자동화 프로그램을 만들기 위한 파이썬 기본 공부를 한 내용입니다.


 

 

"정의


파이썬의 하나의 자료형이다.  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

 

5. 자료 구조 — Python 3.9.4 문서

5. 자료 구조 이 장에서는 여러분이 이미 배운 것들을 좀 더 자세히 설명하고, 몇 가지 새로운 것들을 덧붙입니다. 5.1. 리스트 더 보기 리스트 자료 형은 몇 가지 메서드들을 더 갖고 있습니다. 이

docs.python.org

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유