1. 딕셔너리 자료형 == 사전 자료형
a = {1:'a', 2:'b', 3:'c'} (JS 의 객체 형태와 비슷하다.)
여기서 속성인 1,2,3 = Key, 'a', 'b', 'c'는 = Value 가 된다. key와 value , 쌍으로 데이터를 저장
딕셔너리 자료형은 아래서 공부할 집합 자료형처럼 순서가 없기 때문에 index, 인덱싱 불가이다.
비어있는 딕셔너리는
a = dict() 으로 생성
* 딕셔너리의 key는 고유한 unique 값이다.
똑같은 key 값들이 있으면 가장 마지막것만 유효, 나머지는 무시된다.
Key에는 List를 쓸 수 없다. (나머지 튜플, 숫자, 문자열 등 가능)
해시테이블 (Hash Table)을 이용하므로 (key 혹은 집합의 원소Element를 이용하여) 데이터의 조회, 수정에 있어 O(1)의 시간에 처리하는 장점
딕셔너리 쌍 추가 / 삭제 / key이용해 value 얻기 / 여러개 키값 존재할 때 마지막 key값 빼고 무시됨
# 딕셔너리 쌍 추가하기
a = {1:'a'}
a[2]='b'
print(a)
a['name']='John'
print(a)
a[3]=[1,2,3]
print(a)
a[4]=(1,2,3)
print(a)
a[5]=10,20
print(a)
#딕셔너리 쌍 삭제하기
del a['name']
print(a)
del a[3]
print(a)
#Key 이용해 Value 얻기
print(a[1])
print(a[4])
#중복 key값 의 경우
a= {1:'a', 2:'Hello', 1:'c', 2:'good'}
print(a[1])
print(a[2])
Key값 , Values , 둘 다 가져오기, .items(), key값으로 value 없기, .clear() 딕셔너리 초기화
a = {'name':'Tasha', 'age':30, 'hobby':['piano', 'football']}
#Key 값 가져오기
print(a.keys())
print(list(a.keys()))
#values 만 가져오기
print(a.values())
print(list(a.values()))
#key, values 둘 다 가져오기
print(a.items())
print(list(a.items()))
#key값으로 value 얻기 = a[0] , a[1]과 같음
print(a.get('name'))
print(a.get('hobby'))
print(a.get('hello'))
print(a.get('hello', 'haha'))
print('name' in a)
print('Hello' in a)
a.clear()
print(a)
#빈 딕셔너리 생성
b= dict()
print(b)
.pop('key-name') 으로 해당 value를 꺼내오고 return, 그리고 해당 key,value를 빼낸다.
a = {'a':9, 'b':30, 'c':50}
result = a.pop('b')
print(result)
print(a)
data = dict()
data['사과']='Apple'
data['바나나']='Banana'
data['코코넛']='Coconut'
print(data)
if '사과' in data:
print(data['사과'])
key = data.keys()
value = data.values()
print(key)
print(value)
for i in key:
print(i)
print(data[i])
2. 집합 자료형
파이썬 2.3부터 지원함
집합에 관련된 것을 쉽게 처리하기위해 만든 자료형
* 중복을 허용하지않음, 순서가 없음 -> 딕셔너리처럼 인덱싱 불가. 하려면 튜플 or 리스트로 변환해서 인덱싱 진행
빈 집합 자료형 만들기 s = set() / s = ({ }) / s = set([ ]) / set (( ))
어떤 요소가 집합 안에 있는지 없는지 그 여부만을 다룰 때 효과적임.
집합 자료형 연습, list, tuple로 만들어 요소에 접근하기, 교집합, 합집합, 차집합 구하기
#질서가 없다 / 중복이 없다.
a = set("hello")
print(a)
a = set([1,2,3])
print(a)
a = set((3,3,5))
print(a)
#list, tuple로 바꿔 요소에 접근하기
b = list(a)
print(b)
print(b[0])
c = tuple(a)
print(c)
print(c[0])
#tuple 연습
print(tuple(a))
a = 'asdf'
print(tuple(a))
#집합 자료형 교집합 구하기
a = set([1,2,3,4,5,6])
b = set([4,5,6,7,8,9])
print(a&b)
print(a.intersection(b))
#집합 자료형 합집합 구하기
print(a | b)
print(a.union(b))
#집합 자료형 차집합 구하기
print(a-b)
print(b-a)
집합 자료형 관련 함수
집합 자료형에 값 1개 추가 / 여러개 추가 / 특정값 제거
a = set([1,2,3])
a.add(4)
print(a)
a.update([5,6,7])
print(a)
a.remove(1)
print(a)
# 오류 남. remove의 인자값 1개만 가능
a.remove(5,6,7)
print(a)
집합 자료형 요소 1개 추가하기 / 여러개 추가하기 / 특정 값 제거하기
a = set([1,2,3])
a.add(4)
print(a)
a.update((5,6,7))
print(a)
a.remove(1)
print(a)
# 오류 남. remove의 인자값 1개만 가능
#a.remove(5,6,7)
print(a)
a = [1,2,3]
a.remove(3)
print(a)
연습
#집합 자료형 초기화 방법
a = set([0,1,2,3,3,3,2,1,2])
print(a)
b = {1,2,3,3,2,1,3,3,2,4}
print(b)
c = ({1,2,3,3,3,3})
print(c)
#교집합 and
print(a&b)
print(a.intersection(b))
#합집합 or
print(a | b)
print(a.union(b))
#차집합
print(a-b) #0
print(b-a) #4
3. 불 자료형
Bool 자료형은 참 True, 거짓 False 를 나타내는 자료형 (둘 중 하나)
a= [1,2,3,4]
while a: #a 가 참일동안 = a가 !=[] 동안
print(a.pop())
if []:
print('참')
else:
print('거짓')
#bool 내장객체
print(bool('dd'))
print(bool(123))
print(bool([]))
print(bool(0))
print(bool(None))
print(bool())
print(bool(''))
4. 자료형의 값을 저장하는 공간, 변수
a = 1 (any 객체)
여기서 1이라는 값을 담는 곳 a 가 변수이다.
메모리에 a에 담긴 값을 가지는 주소가 자동 생성된다.
여기서 생성되는 메모리 주소가 같은지 다른지에 따라 해당 변수의 일치 여부가 나온다.
ex)
#객체가 담긴 변수의 메모리 주소
a = 1
b = (1,2)
c = {1,2}
d = [1,2]
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(1==1)
print(a is b)
#변수의 일치 여부
a = [1,2,3]
b = [1,2,3]
print(id(a)) # 다르다
print(id(b)) # 다름.
헷갈리는 변수
a = 1
b = 1
print(id(a))
print(id(b))
print(a==b)
print(a is b)
a=(1,2,3)
b=(1,2,3)
print(id(a))
print(id(b))
print(a==b)
print(a is b)
a = [1,2,3]
b = [1,2,3]
print(id(a))
print(id(b))
print(a==b)
print(a is b)
a={1,2,3}
b={1,2,3}
print(id(a))
print(id(b))
print(a==b)
print(a is b)
Number 숫자형, Tuple 튜플 자료형은 다른 변수에 같은 값을 넣으면 메모리 저장 공간이 같다.
List 리스트와 집합 자료형은 같은 값을 다른 변수에 각각 넣어도 메모리 저장 공간이 다르다.
a==b 의 값은 모두 (변수의 값은 같기 때문에) True,
a is b 의 값은 메모리 저장 주소에 따라 결정 -> LIst, 집합 자료형은 False 가 나온다. (주소가 다르기 때문)
헷갈리는 LIST 리스트의 변수
같은 메모리 주소를 공유하는 경우 - 하나의 변수 값을 바꿔도 해당 메모리 주소에 연결된 변수의 값도 함께 바뀐다.
a = [1,2,3]
b = a
print(id(a))
print(id(b))
print(a is b)
a[2] = 10
print(a)
print(b)
b[0] = 0
print(a)
print(b)
b가 a와 같은 값을 가져오면서 a와는 다른 메모리 주소를 가지는 2가지 방법
1. a[:] 전체 슬라이싱으로 복사 -> 메모리의 주소가 달라지고 각각 변수의 변화가 생김
a = [1,2,3]
b = a[:]
print(id(a))
print(id(b))
print(a==b)
print(a is b)
a[2] = 10
print(a)
print(b)
b[0] = 0
print(a)
print(b)
2. copy 모듈 사용
from copy import copy
a = [1,2,3]
b = copy(a)
print(id(a))
print(id(b))
print(a==b)
print(a is b)
a[2] = 10
print(a)
print(b)
b[0] = 0
print(a)
print(b)
변수를 만드는 여러가지 방법
#튜플은 () 괄호가 optional 이다.
a,b = 'python','is good'
print(a)
print(b)
(a,b)='python','is good'
print(a)
print(b)
a,b = ('python', 'is good')
print(a)
print(b)
(a,b) = ('python', 'is good')
print(a)
print(b)
# LIST
a, b = ['python','만세']
print(a)
print(b)
[a,b] = ['python','만세']
print(a)
print(b)
[a,b] = 'python', '만세'
print(a)
print(b)
#여러개 변수에 같은 값 대입
a = b = 'python'
print(a)
print(b)
print(id(a))
print(id(b))
#파이썬 변수의 값 교환하기
a,b = 3,5
print(a,b)
a,b = b,a
print(a,b)
출처 : DO IT ! 점프 투 파이썬 책, 유트브 동빈나님 파이썬 강의
댓글