사전 소개
파이썬의 내장 데이터유형중 하나는 사전입니다. 사전은 키와 값 사이에 일대일 관계를 정의합니다.
☞ 파이썬의 사전은 펄(Perl)의 해시와 비슷합니다. 펄(Perl)에서 해시가 저장된 변수는 언제나 % 문자로 시작합니다. 파이썬에서 변수는 마음대로 지어도 좋으며 파이썬이 내부적으로 그 데이터유형을 추적관리합니다.
☞ 파이썬의 사전은 자바(Java)의 Hashtable 클래스의 실체와 비슷합니다.
☞ 파이썬의 사전은 비주얼 베이직(Visual Basic)의 Scripting.Dictionary 객체의 실체와 비슷합니다.
3.1.1. 사전 정의
예제 3.1. 사전 정의하기
- >>> d = {"server":"mpilgrim", "database":"master"} ①
- >>> 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. 사전 변경하기
- >>> d {'server': 'mpilgrim', 'database': 'master'}
- >>> d['database'] = "pubs" ①
>>> d
{'server': 'mpilgrim', 'database': 'pubs'}
>>> d['uid'] = "sa" ②
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
① 사전에서 키는 중복될 수 없습니다. 기존의 키에 값을 할당하면 예전 값이 없어집니다.
② 언제든지 새로 키-값 쌍을 추가할 수 있습니다. 이 구문은 기존의 값을 변경할 때의 구문과 동일합니다. (그렇습니다. 언젠가 이 때문에 짜증날 때가 있을 것입니다. 새로운 값을 더하고 있다고 생각하지만 실제로는 같은 값을 바꾸고 또 바꾸게 됩니다. 왜냐하면 키가 생각대로 변하지 않기 때문입니다.)
새로운 원소(키는 'uid'이고 값은 'sa'임)가 가운데에 나타난 것에 주목하세요. 사실, 첫 예제에서 순서대로 원소가 나타난 것은 그저 우연이었을 뿐입니다; 지금 순서대로 나타나지 않는 것 역시 그 만큼 우연입니다.
☞ 사전은 원소 사이에 순서 개념이 없습니다. 원소가 “순서가 없다”고 말하는 것은 올바르지 않습니다; 단순히 순서대로 널려 있지 않을 뿐입니다. 이것은 중요한 구별입니다. 이를 구별하지 못하면 사전의 원소에 특정하게 반복가능한 순서로 (예를 들어 키를 알파벳 순서로 하여) 접근하고 싶을 때 고민스러울 것입니다. 이렇게 하는 방법이 있지만 사전 안에 구축되어 들어가 있지 않습니다.
사전으로 작업을 할 때 사전의 키가 대소문자를 구별한다는 것을 인식할 필요가 있습니다.
예제 3.3. 사전의 키는 대소문자에 민감하다
- >>> d = {}
- >>> 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. 사전에서 데이터유형 섞어 쓰기
- >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
- >>> 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. 사전으로부터 원소 제거하기
- >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
- 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 |