본문 바로가기

Programming/Python

[파이썬 프로그래밍] 12화 사전(dictionary)

[파이썬 프로그래밍] 12화 사전(dictionary)




 안업계 에서 자주 쓰는 용어중에 '브루트포스(brute force)' 라는 공격기법이 있습니다.

무차별대입 공격 으로서, 무작위로 대입하는 공격입니다. 이외에 사전대입공격으로

딕셔러리 어택 도 있지요.


이 공격방법의 핵심은 사전에 등록된 단어,문자들을 무차별적으로 대입하는 것인데요.

갑자기 이 얘기를 꺼낸 이유는 이번 12화 에서는 사전(Dictionary) 에 대해서 배우기 떄문에 갑자기

생각 난것도 있고 여러분들에게 이러한 것도 있다 라고 재미로 언급하는것도 있고 , 겸사겸사 얘기를 꺼냈습니다. 해킹기법처럼 파이썬의 사전(dictionary)는 강력하고 편리한 자료구조로 일컫어지고 있습니다.

키와 값의 쌍으로 구성된 사전(딕셔너리)에 대해서 학습해 볼까요?




사전(Dictionary)



 doc 라는 임의의 변수를 정의하고 여기에 dict() 생성자를 만들어서 안에 a=10 , b=20, c=30

이라는 값을 넣어줍니다.


그후 doc 변수를 호출하자 안에 들어있던 값이 호출되며, type를 확인해 보니까 dict 라고 나옵니다.

이것이 바로 사전 입니다.






▲ Bank 라는 은행이죠. 이러한 변수를 만들고 여기에 유저1은 100달러, 유저2는 200달러 라는 식으로

값을 넣어주고 은행변수를 호출하면 출력 됩니다. 이렇게 파이썬 프로그래머가 직접 사전을 생성 할 수도

있다는 점은 장점으로 손꼽힙니다.


아, 그리고 재밌는것은 출력할떄 순서가 바뀌어서 출력되더군요.

user1 , user2 순으로 값을 입력했는데 불구하고 출력은 user2,user1순으로 나왔죠?


그리고 인덱스는 지원하지 않는것도 확인할수 있습니다. 없는키 사용은 저렇게 에러를 내뱉는것을

학습결과 확인 했습니다.






[그림: 사전추가 및 변경방법 ] 


▲ 위 그림에서 은행이라는 변수에 user3 을 넣고 300달러는 넣어줍니다.

형태는 위와 같으며 다시 은행변수를 호출하니까 user3 이 정상적으로 입력된 것을 확인 할 수 있습니다.


그다음으로 기존에 있던 user1 이 불싸하니까 100 달러에서 1000달러로 고쳐서 계좌로 입금해줍니다. ㅎㅎ

은행변수를 호출하니까 가장 거지에서 최고 갑부로 거듭나는 것을 확인 하실수 있습니다.



*사전삭제방법 : del 변수명['값'] 

한번에 삭제하기: 변수명.clear()



사전의 내용얻기




▲ for문이죠. 반복문 입니다. 여기서 C는 임의로 선언한 변수이구요. 

은행이라는 변수에 items() 라는 메서드를 사용하면 사전의

모든 키와 값을 튜플로 묶어서 출력해 줍니다.


이번 예제를 통해 반복문 까지도 배우게 되네요 ㅎㅎ 


만약, 튜플형식으로 출력을 원하시지 않다면 이런 방법도 있습니다.






▲ for문 의 변수 a,b를 선언한 다음에 Bank 라는 은행변수에 items()메서드를 넣고 :으로

다음줄에서 print(a,b) 출력을 해주면 튜플형식이 아니라 키와 값만 묶여서 출력 되는 것을

확인 하실 수 있습니다.







▲ for문의 변수 k를 선언하고 in 이라고 써서 그안에 Bank라는 변수 그리고

Keys() 라는 메서드를 사용하고 :이라고 입력하여 밑으로 개행후 들여쓰기

해서 print(k) 라고 출력을 명령하면 이번에는 키(key)값만 나오는 것을 

확인 하실수 있습니다.






▲ 자, 이번에는 for문 선언과 동시에 v라는 변수를 정의하고 in 이라고 쓴다음에

은행변수 Bank 에 values() 라는 메서드를 선언하고 : 으로 다음줄 

개행과 동시에 들여쓰기 해서 print(v) 로 반복문을 돌려주면 이번에는

값만 반환 해 주는 것을 확인 하실수 있습니다.


사전은 중요하니까 자꾸 눈으로 보고, 쳐보고 , 만들어보세요.

한마디로 똑같이 쓰지 마시고 여러 상황에 맞게 적용해보세요.



기억하기 좋은 것은 우뇌로 기억하는 에피소드 기억법 이라는 것이 있습니다.

저는 은행과 유저1,유저2,유저3 이라는 가상 은행시스템을 머릿속에 생각하며

그림을 그렸는데요 여러분들도 여러분만의 그림을 그리면서 코딩해보시면

문법이 조금이라도 더 오래가지 않을까 싶습니다. 감사합니다.