저번에 Dictionary를 생성하고 삭제하는 간단한 방법에 대해서 공부했다면 오늘은 저번에 이어 딕셔너리의 좀 더 복잡한 사용법에 대해서 공부해 보도록 하겠습니다. 저번에 딕셔너리는 {key: value} 가 맵핑되어 있는 집합이자 딕셔너리의 키 값은 Immtable하고, 값은 Mutable하다고 했습니다. 그런데 여기서 Key가 중복되면 에러를 출력해 줄까요? 불행하게도 그렇지 않습니다. 에러를 출력해 주면 내가 뭘 잘못했는지 알고 수정 할 텐데, 그렇지 않습니다. 그냥 값을 출력해 줍니다. 즉, 다음과 같습니다.

 

 

위와 같이 마지막 값만 출력해 줍니다. 이것은 파이썬이 잘못된 언어가 아니라, value가 변할 수 있는 값이기 때문에 마지막 값으로 덮어 씌워지는 것입니다. 딕셔너리 기초에서 봤는데, 딕셔너리는 왜 index로 접근 할 수 없었을까요? index가 존재하지 않고 대신에 key라는 변하지 않는 참조 가능한 값이 있기 때문입니다.

 

 

dictionary를 선언하는 방법은 list 처럼 하되, dictionary가 대괄호로 들러쌓여 있으므로 = { } 처럼 선언해 줍니다. 아니면 딕셔너리 Constructor로도 생성이 가능한데 주의 할 점은 dictionary constructor를 사용할 떄는 대괄호가 아닌 소괄호로 둘러 쌓아 줘야 하고, key에 ' '을 사용하면 안 된다는 점입니다. 사용은 다음과 같이 하면 됩니다.

 

 

리스트 속에 다음과 같이 [ [key, value] ] 키와 value값이 나란히 있으면, dict() 메서드를 통해 dictionary로 변환이 가능합니다.

 

 

딕셔너리에서 키:값 쌍을 여러 개를 만들 고 싶을 경우,

 

 

 

하나의 리스트에 모두다 쓰면 dict 에러가 납니다.

a=[ ['a',1], ['b',1] ] 처럼 나눠써야 에러가 나지 않고 정상적으로 출력이 됩니다. 이러한 점 알아 두시기 바랍니다.

 

딕셔너리를 print하고 싶을 경우, 보통, print 하는 것처럼 형식 지정자를 사용할 필요 없이 바로 print함수 안에 dictionary이름을 적으면 됩니다. print함수가 아니면 pprint 모듈을 import해서 dictionary를 출력할 수도 있습니다.

 

 

오늘은 딕셔너리를 좀 더 자세히 알아 봤습니다만, 충분하지는 않을 것으로 생각됩니다. 저도 충분히 공부했다고 생각되지 않으니까요 ㅎㅎ;;

관련해서 사용하는 것은 pandas와 numpy를 공부할 때 같이 배우도록 하겠습니다.

 

그럼 오늘은 이만 마치도록 하겠습니다.

 

참고자료: https://wikidocs.net/16043

이번엔 파이썬의 특수한 자료형인 딕셔너리 자료형을 학습하도록 하겠습니다. 해당 자료형은 저도 잘 사용하지 않는 관계로 자세하게 공부하면서 포스팅을 해야 하겠습니다. 제가 딕셔너리 자료형을 소홀히 한 이유는 다른 언어에서는 배열만 존재하고 해당 배열이 파이썬 언어에서는 리스트로 사용되기 때문에 딕셔너리 자료형은 자주 사용되지 않거니 하고 생각해기 때문입니다. 하지만 생각보다 자주 사용되더군요. 따라서 생성부터 자세하게 알아보도록 하겠습니다.

 

출처: https://wikidocs.net/16 

(점프 투 파이썬)

 

1. 딕셔너리 자료형의 생성

 

기본적으로 딕셔너리 자료형은 Index로 이루어져 있지 않고 key : value 이렇게 사전처럼 이루어져 있으므로 생성 할 때도, key값과 value값을 모두 생성 해 줘야 합니다. DB를 배우신 분은 아시겠지만 KEY값은 일반적으로 유일한 값이어야 한다는 것을 아실 것입니다. 그리고 파이썬의 딕셔너리에서도 유일한 값으로 사용합니다. 그러면 코딩을 해서 생성 해보록 하겠습니다.

 

 

 dic이라는 dictionary에 zipcode와 phone을 'key'와 value쌍으로 추가 했습니다. 그런데 여기에 이름이 빠진 것 같아서 'name'과 그에 해당하는 값을 추가 해 줬습니다. 추가하는 방법은 dictionary 이름['key 이름'] = value 입니다. 이렇게 해 줬더니. 값이 정상적으로 들어 간 것을 확인 할 수가 있습니다. 그런데 핸드폰이 dictionary에서 필요가 없어졌다고 합니다. 그러면 삭제를 해 줘야 하는데 이건 del명령어를 사용해줘야 합니다. 즉, del dictionary이름['key이름'] 이렇게 지우면 됩니다. 그러면 정상적으로 phone 값이 사라진 것을 볼 수 있습니다.

 

 기존에 인덱스로 자료에 접근하던 프로그래머들에게는 매우 생소한 자료형이긴 하지만 처음 프로그래밍 하는 사람들에게는 오히려 이게 편리 할 수도 있을 것 같긴 합니다. 프로그래밍 시에는 리스트나 Ndarray가 더 많이 쓰이긴 하지만요. (딕셔너리도 의외로 쓰이긴 합니다. 무시해서는 큰 코 다칩니다. 저처럼요)

 

 그럼 다음으로 넘어가서. 딕셔너리를 활용하는 방법에 대해서 알아 보도록 하겠습니다. 실제로는 판다스 DataFrame안에 넣어서 사용하거나 하지만 저처럼 기초를 모르면 흔들리기 때문에 기초부터 자세히 짚고 넘어가도록 하겠습니다.

 

 

 

 dictionary에 접근하는 방법은 dictionary이름['key'] 입니다. 추가하는 방법과 비슷합니다. 따라서 나중에 공부하도록 하겠지만 pandas나 numpy에서 한 열이나 행을 출력하거나 할 때도 딕셔너리를 이렇게 사용 할 수 있겠네요. 하지만 For문으로 i+를 통해서 index를 증가 시키면서 점진적으로 출력시키는 데에는 어려움이 있을 것 같습니다. 그래서 list를 사용합니다. dictionary의 key이름이 [1] [2]....이렇게 index처럼 구분 될 수 있으면 반복 문이 사용 될 수도 있겠네요. 어쨌든, 그건 추후의 일이고.

 

 앞에서도 언급했는데, 딕셔너리를 만들 때 주의해야 할 사항은 첫째로  key는 반드시 유일해야 한다는 것입니다. 그렇지 않으면 하나를 제외한 나머지 값들이 무시되어 버리는 현상이 발생해 버립니다. 그리고 key는 불변해야 한다는 것 입니다.

 

 

2. 딕셔너리 관련 기초 함수

 

 

딕셔너리를 자유롭게 다루기 위해서는 관련 개념을 아는 것 뿐만 아니라, 동작하는 함수들도 알고 있어야만 합니다. 물론 필요 할 시에 참조해도 됩니다. 그냥 이런 기능이 있었지~하고 알고 있으면 됩니다.

 

 

 

 dictionary.keys() 라는 함수가 있습니다. 그러면 이 함수는 dictionary의 key만을 모아서 dict_key라는 객체를 리턴합니다. 주의 할 것은 여기서 이것은 리스트처럼 보이지만, 리스트가 아니라는 점입니다. 파이썬 2.x, 정확히는 2.7까지는 dict_key는 list를 리턴했지만 3.0이후에는 list가 아닌 단순한 객체로서 리턴 되었습니다.

 

 

 

 

dictionary.keys()가 출력하는 것이 list였다면 list()안에 들어가서 list가 만들어 질리가 없겠죠? 그런데 list가 만들어 졌습니다.

 

 뿐만 아니라 리스트 함수인 append를 사용 할 수 없다는 에러 메세지가 출력이 됩니다. 이러한 정황들로 봐서, dictionary.keys()가 출력하는 것은 리스트가 아닌 단순한 객체를 출력하는 것으로 볼 수 있습니다.

 

dictionary.keys()와 비슷하게 dictionary의 value값을 얻고 싶다면 dictionary.values()함수를 사용하면 됩니다. 이것도 싫다. 나는 key랑 value 쌍으로 얻고 싶다. 하면 dictionaly.items()함수를 사용하시면 됩니다. 사용은 다음과 같이 하시면 됩니다. 생각보다 매우 간단합니다.

 

 

 

각각 dictionary.values()는 dict_values객체를 그리고 dictionary.items()는 dict_items객체를 리턴 하는 것을 볼 수 있습니다. 뿐만 아니라 dictionary자료형은 list처럼 clear()함수를 통해 dictionaryd의 key : value 쌍을 지우는 것을 지원 합니다. dictionary.clear() 이렇게 사용하면 되겠습니다.

 

 딕셔너리 자료형은 저도 잘 모르는 관계로 공부하면서 포스팅 하고 있습니다. 그래서 기초와 심화로 나누어서 포스팅 할 것입니다. 이번에 dictionary를 잘 공부해두면 저도 좋고 이걸 보시는 분들도 좋을 것 같아서 말이죠 ㅎㅎ

 

 

 

'머신러닝 > 기초 문법' 카테고리의 다른 글

넘파이 기초 - 색인과 슬라이싱 기초(2)  (1) 2019.01.31
5. 딕셔너리 심화 - (2)  (0) 2019.01.30
4. 리스트와 관련 메서드  (0) 2019.01.28
3. String -(2) : string 함수  (0) 2019.01.24
3. String - (1)  (0) 2019.01.22

+ Recent posts