회원 로그인
|
Python 7강 - 사전
Python07.asf
Python 7강
사전
1. 사전 객체의 기초 연산
2. 사전 객체의 메쏘드
3. 심볼 테이블
4. 사전을 for문으로 참조하기
1. 사전 객체의 기초 연산
#사전
키(key)를 이용해 값(value)를 참조하는 메모리 구조
#사전 만들기
>>> member = {'basketball':5, 'soccer':11, 'baseball':9}
>>> member['baseball'] #키를 입력하여 검색
9
#연산
>>> member['volleyball'] = 7 #새 값 설정
>>> member['volleyball']
7
>>> member['volleyball'] = 6 #변경
>>> member['volleyball']
6
>>> member = {'soccer':11, 'volleyball':6, 'baseball':9, 'basketball':5}
>>> len(member) #길이-데이터 수
4
>>> del member['basketball'] #삭제
>>> print member
{'soccer': 11, 'baseball': 9, 'volleyball': 6}
#키와 값
키는 변경 불가능형 객체이어야 한다.
키 값이 변경되면 hash기법에 따라 저장 위치가 달라져야 하므로 허용하지 않는다.
기본 객체로는 문자열, 숫자, 튜플이 가능
리스트와 사전은 키가 될 수 없다
값은 임의의 객체일 수 있다
예제
함수를 값으로 활용한 예
>>> def add(a, b): #add 함수 만들기
return a + b
>>> def sub(a, b): #sub 함수 만들기
return a - b
>>> action = {0:add, 1:sub} #사전 정의
>>> action #출력
{0:, 1: }
>>> add #add출력,
>>> action[0] #add출력
>>> sub #sub출력,
>>> action[1] #sub출력
>>> action[0] (3, 4) #add 연산
7
>>> action[1] (5, 4) #sub 연산
1
2. 사전 객체의 메쏘드
#가장 많이 사용하는 메쏘드
keys() - 키 리스트
values() - 값 리스트
items() - (키, 값) 리스트 (튜플)
has_key(key) - 키가 있는가?
>>> D = {'one':1, 'two':2, 'three':3} #사전 정의
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> D.keys() #키 리스트
['three', 'two', 'one']
>>> D.values() #값 리스트
[3, 2, 1]
>>> D.items() #(키, 값) 리스트
[('three', 3), ('two', 2), ('one', 1)]
>>> D.has_key('one') #키 있는지 검색
True
>>> D['four'] #키가 없으면 키에러 발생
Traceback (most recent call last):
File "", line 1, in
D['four']
KeyError: 'four'
>>> if D.has_key('four'): #만약 four가 있다면 four를 출력
print D['four']
#기타 메쏘드
clear() - 항목 모두 삭제
copy() - 사전 복사
get(key[,x]) - 키가 없으면 x를 취한다
setdefault(key[,x]) - 키가 없으면 x를 키에 설정한다.
update(D) - D사전의 내용으로 갱신
popitem() - (키, 값)을 리턴하고 항목 제거
>>> D.clear() #사전 클리어
>>> D
{}
>>> D = {'one':1, 'two':2, 'three':3}
>>> E = D.copy() #사전 복사
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> E
{'one': 1, 'three': 3, 'two': 2}
>>> E['one'] = 'hana'
>>> E #복사한 E는 D와 다른 객체이다.
{'one': 'hana', 'three': 3, 'two': 2}
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> D.get('one') #키의 값을 출력
1
>>> D['four'] #사전에 없는 데이터가 있을 시
Traceback (most recent call last):
File "", line 1, in
D['four']
KeyError: 'four' #키에러 표시하는데
>>> D.get('four') #get()을 사용하면
>>> print D.get('four') #None이라는 데이터가 임시로 들어간다
None
>>> D.get('four', 4) #four라는 키를 입력할 때 4를 출력한다.
4
>>> D #하지만 사전에 정의되지 않는다.
{'three': 3, 'tow': 2, 'one': 1}
>>> D.setdefault('four') #get()과 비슷하나
>>> D #사전 정의가 가능하고
{'four': None, 'three': 3, 'tow': 2, 'one': 1}
>>> D.setdefault('five', 5) #키의 값도 넣을 수 있다.
5
>>> D
{'four': None, 'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> E
{'one': 'hana', 'three': 3, 'tow': 2}
>>> D
{'four': None, 'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> E.update(D) #D의 데이터가 업데이트 된다.
>>> E
{'tow': 2, 'three': 3, 'one': 1, 'four': None, 'five': 5}
>>> D.popitem() #사전에서 꺼내고 삭제한다.
('four', None)
>>> D #0번째 데이터가 없어졌다.
{'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> key, value = D.popitem() #popitem()을 이용해 키와 값을 따로 뽑을 수가 있다
>>> key
'three'
>>> value
3
>>> D #역시 사전에서 제거가 됐다.
{'five': 5, 'tow': 2, 'one': 1}
#키 멤버십 확인(v2.2)
'jack' in phoneDict
2.2부터 in이라는 연산자 사용가능
>>> D
{'five': 5, 'tow': 2, 'one': 1}
>>> 'fine' in D #D안에 fine이 없으므로 False
False
>>> 'finf' in D
False
>>> 'five' in D #five가 있으므로 True
True
>>> D.has_key('five') #has_key()로도 확인 가능하다.
True
11:20
3. 심볼 테이블
#심볼 테이블이란?
심볼(이름)에 대한 값이 저장된 테이블
a = 1, B = 20
심볼 테이블이 사전에 직접적으로 표현 할 수 있는 자료
----------
| a | 1 |
| B | 20 |
----------
전역/진역 심볼 테이블
globals() - 전역 영역 심볼 테이블
locals() - 지역 영역 심볼 테이블
f, g는 함수 local, 이외 영역은 global
----------
| → global 영역
| f---
| | → local 영역
| ----
| → global 영역
| g---
| | → local 영역
| ----
| → global 영역
|---------
>>> globals()
{'__builtins__':, '__name__': '__main__', '__doc__': None}
>>> locals()
{'__builtins__':, '__name__': '__main__', '__doc__': None}
현재 globals()와 locals()는 같다.
>>> def f(a, b):
x = a + b
y = a - b
print locals() #f()함수를 지역 영역으로 지정
>>> f(1, 2)
{'y': -1, 'x': 3, 'b': 2, 'a': 1}
>>> x
Traceback (most recent call last):
File "", line 1, in
print x
NameError: name 'x' is not defined
>>> def f(a, b):
x = a + b
y = a - b
print locals() #지역 영역
print globals() #전역 영역
>>> f(1, 2)
{'y': -1, 'x': 3, 'b': 2, 'a': 1} #지역 영역
{'__builtins__':, '__name__': '__main__', '__doc__': None, 'f': } #전역 연역
객체의 심볼 테이블
__dict__ 속성
사전의 예
함수의 예
>>> class C:
a = 1
b = 2
>>> C.__dict__ #C클래스에 정의된 이름을 확인할 수 있다.
{'a': 1, '__module__': '__main__', 'b': 2, '__doc__': None}
>>> cc = C()
>>> cc.x = 1
>>> cc.y = 2
>>> cc.__dict__
{'y': 2, 'x': 1}
>>> cc.a #cc변수에 a와 b의 값도 참조 가능
1
>>> cc.b
2
>>> dir(cc) #정의한 것을 확인
['__doc__', '__module__', 'a', 'b', 'x', 'y']
>>> def f():
pass #아무것도 수행하지 않는 f()함수
>>> f.a = 2 #바로 값 입력 가능
>>> f.b = 3
>>> f.a
2
>>> f.b
3
>>> f.__dict__ #입력 값을 확인한다.
{'a': 2, 'b': 3}
4. 사전을 for문으로 참조하기
#사전을 리스트로 변환한 후 참조
>>> D = {'one':1, 'two':2, 'three':3}
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> for key in D.keys(): #for문으로 사전 참조1
print key, D[key]
three 3
two 2
one 1
>>> for key in D: #for문으로 사전 참조2
print key, D[key]
three 3
two 2
one 1
>>> items = D.items() #키 기준으로 정렬해서 출력
>>> items
[('three', 3), ('two', 2), ('one', 1)]
>>> items.sort()
>>> for k, v in items:
print k, v
one 1
three 3
two 2
>>> def icmp(x, y): #값 기준으로 정렬
return cmp(x[1], y[1])
>>> items.sort(icmp)
>>> items
[('one', 1), ('two', 2), ('three', 3)]
#예제1 - 사전에 이름과 전화번호 등록하기
- 기능 - 추가, 제거, 검색
#예제2 - 메뉴에 따른 함수 실행
- 사전 값으로 함수를 설정한 예
#책 참조(p 202-206)
Python07.asf 끝
Python 7강
사전
1. 사전 객체의 기초 연산
2. 사전 객체의 메쏘드
3. 심볼 테이블
4. 사전을 for문으로 참조하기
1. 사전 객체의 기초 연산
#사전
키(key)를 이용해 값(value)를 참조하는 메모리 구조
#사전 만들기
>>> member = {'basketball':5, 'soccer':11, 'baseball':9}
>>> member['baseball'] #키를 입력하여 검색
9
#연산
>>> member['volleyball'] = 7 #새 값 설정
>>> member['volleyball']
7
>>> member['volleyball'] = 6 #변경
>>> member['volleyball']
6
>>> member = {'soccer':11, 'volleyball':6, 'baseball':9, 'basketball':5}
>>> len(member) #길이-데이터 수
4
>>> del member['basketball'] #삭제
>>> print member
{'soccer': 11, 'baseball': 9, 'volleyball': 6}
#키와 값
키는 변경 불가능형 객체이어야 한다.
키 값이 변경되면 hash기법에 따라 저장 위치가 달라져야 하므로 허용하지 않는다.
기본 객체로는 문자열, 숫자, 튜플이 가능
리스트와 사전은 키가 될 수 없다
값은 임의의 객체일 수 있다
예제
함수를 값으로 활용한 예
>>> def add(a, b): #add 함수 만들기
return a + b
>>> def sub(a, b): #sub 함수 만들기
return a - b
>>> action = {0:add, 1:sub} #사전 정의
>>> action #출력
{0:
>>> add #add출력,
>>> action[0] #add출력
>>> sub #sub출력,
>>> action[1] #sub출력
>>> action[0] (3, 4) #add 연산
7
>>> action[1] (5, 4) #sub 연산
1
2. 사전 객체의 메쏘드
#가장 많이 사용하는 메쏘드
keys() - 키 리스트
values() - 값 리스트
items() - (키, 값) 리스트 (튜플)
has_key(key) - 키가 있는가?
>>> D = {'one':1, 'two':2, 'three':3} #사전 정의
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> D.keys() #키 리스트
['three', 'two', 'one']
>>> D.values() #값 리스트
[3, 2, 1]
>>> D.items() #(키, 값) 리스트
[('three', 3), ('two', 2), ('one', 1)]
>>> D.has_key('one') #키 있는지 검색
True
>>> D['four'] #키가 없으면 키에러 발생
Traceback (most recent call last):
File "
D['four']
KeyError: 'four'
>>> if D.has_key('four'): #만약 four가 있다면 four를 출력
print D['four']
#기타 메쏘드
clear() - 항목 모두 삭제
copy() - 사전 복사
get(key[,x]) - 키가 없으면 x를 취한다
setdefault(key[,x]) - 키가 없으면 x를 키에 설정한다.
update(D) - D사전의 내용으로 갱신
popitem() - (키, 값)을 리턴하고 항목 제거
>>> D.clear() #사전 클리어
>>> D
{}
>>> D = {'one':1, 'two':2, 'three':3}
>>> E = D.copy() #사전 복사
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> E
{'one': 1, 'three': 3, 'two': 2}
>>> E['one'] = 'hana'
>>> E #복사한 E는 D와 다른 객체이다.
{'one': 'hana', 'three': 3, 'two': 2}
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> D.get('one') #키의 값을 출력
1
>>> D['four'] #사전에 없는 데이터가 있을 시
Traceback (most recent call last):
File "
D['four']
KeyError: 'four' #키에러 표시하는데
>>> D.get('four') #get()을 사용하면
>>> print D.get('four') #None이라는 데이터가 임시로 들어간다
None
>>> D.get('four', 4) #four라는 키를 입력할 때 4를 출력한다.
4
>>> D #하지만 사전에 정의되지 않는다.
{'three': 3, 'tow': 2, 'one': 1}
>>> D.setdefault('four') #get()과 비슷하나
>>> D #사전 정의가 가능하고
{'four': None, 'three': 3, 'tow': 2, 'one': 1}
>>> D.setdefault('five', 5) #키의 값도 넣을 수 있다.
5
>>> D
{'four': None, 'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> E
{'one': 'hana', 'three': 3, 'tow': 2}
>>> D
{'four': None, 'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> E.update(D) #D의 데이터가 업데이트 된다.
>>> E
{'tow': 2, 'three': 3, 'one': 1, 'four': None, 'five': 5}
>>> D.popitem() #사전에서 꺼내고 삭제한다.
('four', None)
>>> D #0번째 데이터가 없어졌다.
{'three': 3, 'five': 5, 'tow': 2, 'one': 1}
>>> key, value = D.popitem() #popitem()을 이용해 키와 값을 따로 뽑을 수가 있다
>>> key
'three'
>>> value
3
>>> D #역시 사전에서 제거가 됐다.
{'five': 5, 'tow': 2, 'one': 1}
#키 멤버십 확인(v2.2)
'jack' in phoneDict
2.2부터 in이라는 연산자 사용가능
>>> D
{'five': 5, 'tow': 2, 'one': 1}
>>> 'fine' in D #D안에 fine이 없으므로 False
False
>>> 'finf' in D
False
>>> 'five' in D #five가 있으므로 True
True
>>> D.has_key('five') #has_key()로도 확인 가능하다.
True
11:20
3. 심볼 테이블
#심볼 테이블이란?
심볼(이름)에 대한 값이 저장된 테이블
a = 1, B = 20
심볼 테이블이 사전에 직접적으로 표현 할 수 있는 자료
----------
| a | 1 |
| B | 20 |
----------
전역/진역 심볼 테이블
globals() - 전역 영역 심볼 테이블
locals() - 지역 영역 심볼 테이블
f, g는 함수 local, 이외 영역은 global
----------
| → global 영역
| f---
| | → local 영역
| ----
| → global 영역
| g---
| | → local 영역
| ----
| → global 영역
|---------
>>> globals()
{'__builtins__':
>>> locals()
{'__builtins__':
현재 globals()와 locals()는 같다.
>>> def f(a, b):
x = a + b
y = a - b
print locals() #f()함수를 지역 영역으로 지정
>>> f(1, 2)
{'y': -1, 'x': 3, 'b': 2, 'a': 1}
>>> x
Traceback (most recent call last):
File "
print x
NameError: name 'x' is not defined
>>> def f(a, b):
x = a + b
y = a - b
print locals() #지역 영역
print globals() #전역 영역
>>> f(1, 2)
{'y': -1, 'x': 3, 'b': 2, 'a': 1} #지역 영역
{'__builtins__':
객체의 심볼 테이블
__dict__ 속성
사전의 예
함수의 예
>>> class C:
a = 1
b = 2
>>> C.__dict__ #C클래스에 정의된 이름을 확인할 수 있다.
{'a': 1, '__module__': '__main__', 'b': 2, '__doc__': None}
>>> cc = C()
>>> cc.x = 1
>>> cc.y = 2
>>> cc.__dict__
{'y': 2, 'x': 1}
>>> cc.a #cc변수에 a와 b의 값도 참조 가능
1
>>> cc.b
2
>>> dir(cc) #정의한 것을 확인
['__doc__', '__module__', 'a', 'b', 'x', 'y']
>>> def f():
pass #아무것도 수행하지 않는 f()함수
>>> f.a = 2 #바로 값 입력 가능
>>> f.b = 3
>>> f.a
2
>>> f.b
3
>>> f.__dict__ #입력 값을 확인한다.
{'a': 2, 'b': 3}
4. 사전을 for문으로 참조하기
#사전을 리스트로 변환한 후 참조
>>> D = {'one':1, 'two':2, 'three':3}
>>> D
{'three': 3, 'two': 2, 'one': 1}
>>> for key in D.keys(): #for문으로 사전 참조1
print key, D[key]
three 3
two 2
one 1
>>> for key in D: #for문으로 사전 참조2
print key, D[key]
three 3
two 2
one 1
>>> items = D.items() #키 기준으로 정렬해서 출력
>>> items
[('three', 3), ('two', 2), ('one', 1)]
>>> items.sort()
>>> for k, v in items:
print k, v
one 1
three 3
two 2
>>> def icmp(x, y): #값 기준으로 정렬
return cmp(x[1], y[1])
>>> items.sort(icmp)
>>> items
[('one', 1), ('two', 2), ('three', 3)]
#예제1 - 사전에 이름과 전화번호 등록하기
- 기능 - 추가, 제거, 검색
#예제2 - 메뉴에 따른 함수 실행
- 사전 값으로 함수를 설정한 예
#책 참조(p 202-206)
Python07.asf 끝
댓글 0개
| 엮인글 0개
285개(14/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
25 | [VisualStudio] Visual Studio Express 2012 다운로드/설치 | 푸딩뱃살 | 2731 | 2013.04.06 20:12 |
24 | [Python] DC 이효리 겔러리에서 사진 추출하기 | artsOne | 934 | 2009.03.27 01:54 |
23 | [Python] 클래스 안의 함수 실행 | artsOne | 2544 | 2012.09.20 11:54 |
22 | [Python] 기본 함수들 | artsOne | 4881 | 2012.09.12 15:39 |
21 | [Python] Config Parser | artsOne | 2264 | 2012.08.28 13:55 |
20 | [Python] win32 오픈오피스 실행 | artsOne | 2154 | 2012.08.01 17:38 |
19 | [Python] 문자열의 기호들을 출력하기 | artsOne | 2867 | 2009.04.17 11:59 |
18 | [Python] python 자료형 / 자료형 출력 | artsOne | 3393 | 2009.03.30 00:54 |
17 | [Python] win32 모듈로 Excel 사용하기 | artsOne | 4113 | 2008.03.18 02:24 |
16 | [Python] 용어 정리 | artsone | 3565 | 2008.02.26 23:11 |
15 | [Python] Python 9강 - 파일 | artsone | 9962 | 2007.11.03 02:59 |
14 | [Python] Python 8강 - 객체의 복사 및 형 변환 | artsone | 5217 | 2007.11.01 04:15 |
>> | [Python] Python 7강 - 사전 | artsone | 2871 | 2007.10.30 03:26 |
12 | [Python] Python 6강 - 튜플 | artsone | 3138 | 2007.10.24 05:30 |
11 | [Python] Python 5강 - 리스트 | artsone | 7338 | 2007.10.23 22:13 |
10 | [Python] Python 4강 - 문자열 | artsone | 3700 | 2007.10.20 03:04 |
9 | [Python] Python 3강 - 수치 자료형과 연산자 | artsone | 4196 | 2007.10.18 17:01 |
8 | [Python] Python 2강 - 파이썬 문과 기본 자료형 | artsone | 5314 | 2007.10.15 02:25 |
7 | [Python] Python 1강 - 파이썬이란? | artsOne | 3418 | 2007.10.11 23:36 |
6 | [Python] [스크랩] Python은 무엇인가? | artsone | 1998 | 2008.02.26 16:20 |