본문 바로가기

Python

3.1. 사전

사전 소개 
파이썬의 내장 데이터유형중 하나는 사전입니다. 사전은 키와 값 사이에 일대일 관계를 정의합니다. 
 
☞ 파이썬의 사전은 펄(Perl)의 해시와 비슷합니다. 펄(Perl)에서 해시가 저장된 변수는 언제나 % 문자로 시작합니다. 파이썬에서 변수는 마음대로 지어도 좋으며 파이썬이 내부적으로 그 데이터유형을 추적관리합니다.  
☞ 파이썬의 사전은 자바(Java)의 Hashtable 클래스의 실체와 비슷합니다.  
☞ 파이썬의 사전은 비주얼 베이직(Visual Basic)의 Scripting.Dictionary 객체의 실체와 비슷합니다.  
 
 
3.1.1. 사전 정의 
예제 3.1. 사전 정의하기

 

  1. >>> d = {"server":"mpilgrim", "database":"master"} ①
  2. >>> d
    {'server': 'mpilgrim', 'database': 'master'}
    >>> d['server']                                    ②
    'mpilgrim'
    >>> d['database']                                  ③
    'master'
    >>> d['mpilgrim']                                  ④
    Traceback (innermost last):
      File "", line 1, in ?
    KeyError: mpilgrim

 

①  먼저, 원소가 두 개인 사전을 새로 만들어 변수 d에 할당합니다. 각 원소는 키-값 쌍이며 원소 전체는 활괄호로 둘러싸입니다.  
②  'server'는 키이고 d['server']로 참조한 그의 연관 값은 'mpilgrim'입니다.  
③  'database'는 키이고 d['database']로 참조한 그의 연관 값은 'master'입니다.  
④  키로 값을 얻을 수 있지만 값으로 키를 얻을 수는 없습니다. 그래서 d['server']는 'mpilgrim'이지만 d['mpilgrim']은 예외를 일으킵니다. 'mpilgrim'은 키가 아니기 때문입니다.  
 
 
3.1.2. 사전 변경하기 
예제 3.2. 사전 변경하기

 

  1. >>> d {'server': 'mpilgrim', 'database': 'master'}
  2. >>> d['database'] = "pubs" ①
    >>> d
    {'server': 'mpilgrim', 'database': 'pubs'}
    >>> d['uid'] = "sa"        ②
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
 
①  사전에서 키는 중복될 수 없습니다. 기존의 키에 값을 할당하면 예전 값이 없어집니다. 
②  언제든지 새로 키-값 쌍을 추가할 수 있습니다. 이 구문은 기존의 값을 변경할 때의 구문과 동일합니다. (그렇습니다. 언젠가 이 때문에 짜증날 때가 있을 것입니다. 새로운 값을 더하고 있다고 생각하지만 실제로는 같은 값을 바꾸고 또 바꾸게 됩니다. 왜냐하면 키가 생각대로 변하지 않기 때문입니다.)  
 
새로운 원소(키는 'uid'이고 값은 'sa'임)가 가운데에 나타난 것에 주목하세요. 사실, 첫 예제에서 순서대로 원소가 나타난 것은 그저 우연이었을 뿐입니다; 지금 순서대로 나타나지 않는 것 역시 그 만큼 우연입니다. 
 
☞ 사전은 원소 사이에 순서 개념이 없습니다. 원소가 “순서가 없다”고 말하는 것은 올바르지 않습니다; 단순히 순서대로 널려 있지 않을 뿐입니다. 이것은 중요한 구별입니다. 이를 구별하지 못하면 사전의 원소에 특정하게 반복가능한 순서로 (예를 들어 키를 알파벳 순서로 하여) 접근하고 싶을 때 고민스러울 것입니다. 이렇게 하는 방법이 있지만 사전 안에 구축되어 들어가 있지 않습니다.  
 
사전으로 작업을 할 때 사전의 키가 대소문자를 구별한다는 것을 인식할 필요가 있습니다.
 
예제 3.3. 사전의 키는 대소문자에 민감하다

 

  1. >>> d = {}
  2. >>> d['key'] = "value"
    >>> d['key'] = "other value" ①
    >>> d
    {'key': 'other value'}
    >>> d['Key'] = "third value" ②
    >>> d
    {'Key': 'third value', 'key': 'other value'}
 

①  사전에서 기존의 키에 값을 할당하면 그냥 예전 값을 새로운 값으로 교체합니다. 

②  이는 기존의 사전 키에 값을 할당하는 것이 아닙니다. 왜냐하면 파이썬에서 문자열은 대소문자가 구별되므로 'key'와 'Key'는 서로 같지 않기 때문입니다. 이 때문에 새로 키/값 쌍이 사전에 생성됩니다; 여러분의 눈에는 비슷해 보이지만 파이썬의 관점에서는 완전히 다릅니다.  
 
예제 3.4. 사전에서 데이터유형 섞어 쓰기

 

  1. >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
  2. >>> d['retrycount'] = 3 ①
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
    >>> d[42] = "douglas"   ②
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
    42: 'douglas', 'retrycount': 3}

 

①  사전은 문자열에만 적용되는 것이 아닙니다. 사전의 값은 어떤 데이터유형도 될 수 있습니다. 문자열이나 정수 또는 객체 심지어 다른 사전도 가능합니다. 사전 안에서 값들은 유형이 모두 같을 필요가 없습니다; 얼마든지 섞어 쓸 수 있습니다.  
②  사전의 키는 조금 제한이 있지만 문자열과 정수 그리고 기타 다른 유형이 될 수 있습니다. 역시 사전 안에서 키 데이터유형을 섞어 쓸 수 있습니다.  

 

 

3.1.3. 사전으로부터 원소 제거 
예제 3.5. 사전으로부터 원소 제거하기

 

  1. >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
  2. 42: 'douglas', 'retrycount': 3}
    >>> del d[42] ①
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
    >>> d.clear() ②
    >>> d
    {}

 

①  del을 사용하면 키로 사전에서 원소를 지울 수 있습니다.  
②  clear는 사전에서 모든 원소를 삭제합니다. 비어 있는 활괄호 세트는 원소가 하나도 없는 사전을 뜻합니다.  

'Python' 카테고리의 다른 글

3.6. 리스트 짝짓기  (0) 2012.01.11
3.5. 문자열 형식화  (0) 2012.01.11
3.4. 변수 선언  (0) 2012.01.11
3.3. 터플  (0) 2012.01.10
3.2. 리스트  (0) 2012.01.10