[Grammer] Dictionary vs Set

Saemi Min·2023년 1월 31일
0

Python Grammer

목록 보기
5/8
post-thumbnail

Dictionary (딕셔너리)

  • 중복이 불가능한 collection 자료형
  • 가변성(mutable)
  • key-value 구조
  • key 중복이 안됨
  • key에 리스트 사용 X
  • 연관 배열(Associative array) 또는 해시(Hash)와 같은 자료형

Dictionary 자료형

딕셔너리 표현

d=dict() #딕셔너리 선언
{Key1:Value1, Key2:Value2, Key3:Value3, ...} #기본 딕셔너리 표현

딕셔너리 쌍 추가, 삭제하기

<딕셔너리 쌍 추가>
a={1:'a'}
a[2]='b' #a={1:'a', 2:'b'}
a[3]=[1, 2, 3] #a={1:'a', 2:'b', 3:[1, 2, 3]}
a['name'] = 'pey' #a={1:'a', 2:'b', 3:[1, 2, 3], 'name'='pey'}

<딕셔너리 요소 삭제>
[del dict_obj[key]]
del a[1] #{2:'b', 3:[1, 2, 3], 'name'='pey'}

pop 메소드 사용
[pop(key[,default])]
: key값에 해당하는 value 리턴, key가 없다면 두번째 파라미터인 default 리턴

# pop 이용하기 - 키가 있는 경우 대응하는 value 리턴
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.pop('김철수', 180) # 300

# pop 이용하기 - 키가 없는 경우 대응하는 default 리턴
my_dict = {'김철수': 300, 'Anna': 180}
my_dict.pop('홍길동', 180) # 180

딕셔너리를 사용하는 방법

grade = {'pey': 10, 'julliet': 99}
grade['prey'] #10

a = {1:'a', 2:'b'}
a[1] #'a'

a = {'a':1, 'b':2}
a['a'] #1

딕셔너리 함수

  • <key 리스트 만들기(keys)>
    리스트 고유의 append, insert, pop, remove, sort 함수 수행 X
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.keys() #딕셔너리의 키 목록 dict_keys(['name', 'phone', 'birth'])
for k in a.keys():
	print(k)
    		#name
    		# phone
            # birth
list(a.keys()) #['name', 'phone', 'birth']
  • <Value 리스트 만들기(values)>
a.values() #딕셔너리의 값 목록 dict_values(['pey', '010-9999-1234', '1118'])
  • <Key, Value 쌍 얻기(items)>
a.items() #딕셔너리의 key-value 튜플 목록 
		# dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])

# key-value 동시 순회
dict = {'김철수': 300, 'Anna': 180}
for key, value in dict.items():
    print(key, value)
    
'''
김철수 300
Anna 180
'''       
  
  • <Key:Value 쌍 모두 지우기(clear)>
a.clear() #딕셔너리의 모든 요소 삭제
a #{}
  • <Key로 Value 얻기 (get, [])>
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
a.get('name') #'pey'

딕셔너리에 존재하지 않는 키로 값을 가져오는 방식
a.get('abc') 방식 vs a['abc'] 방식
a.get('abc')의 경우 None("거짓"이라는 의미) 반환
a['abc']의 경우 오류 발생

딕셔너리 안에 찾으려는 Key가 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때
get(x, '디폴트 값')
a.get('nokey', 'foo') #'foo'

1.
get 메소드를 아용해 원소 가져오기 1
# 딕셔너리에 해당 key가 없을때 Key Error 를 내는 대신, 특정한 값을 가져온다.

dict = {'하이': 300, '헬로': 180}
dict.get('동동', 0) # 0

2.
get 메소드를 아용해 원소 가져오기 2
# 물론, 딕셔너리에 해당 key가 있는 경우 대응하는 value를 가져온다.

dict = {'하이': 300, '헬로': 180}
dict.get('헬로', 0) # 180


3.
[] 기호 사용해 원소 가져오기
dict = {'하이': 300, '헬로': 180, 3: 5}
dict['헬로'] # 180
  • <딕셔너리에 Value를 집어넣거나 업데이트할 때 []사용 (set)>
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': 1118}
a['name'] = 'pin' #{'name':'pin', 'phone':'010-9999-1234', 'birth': 1118}
a['birth'] +=1 #{'name':'pin', 'phone':'010-9999-1234', 'birth': 1119}
  • <해당 Key가 딕셔너리 안에 있는지 조사하기(in)>
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
'name' in a #True
'email' in a #False
  • <다양한 method>
d.copy() # 딕셔너리 복사
d.fromkeys() #seq, value 셋으로 딕셔너리 생성

Set (셋, 집합)

  • 요소의 중복이 불가능한 내장모듈 collection 자료형
  • 가변성(mutable)
  • 비순차적(Not iterable)
  • 순서가 없음(Unordered)
  • 중복제거, 교집합, 합집합, 차집합 등의 수학적인 계산이 가능
  • add(), update(), remove() 메소드를 활용하여 요소/삭제 가능

Set 자료형

집합 표현

s=set() #비어있는 집합 자료형
s1={1, 2, 3, 4, 5} #s1 선언
s2= set([1, 2, 2, 3, 3, 3, 4, 4, 4, 4]) #셋으로 변환
s2 #{1, 2, 3, 4}
s3 = set("Hello")
s3 #{'e', 'H', 'l', 'o'}

<set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나  튜플로 변환한 후 해야 함>
s1 = set([1,2,3])

l1 = list(s1)
l1 #[1, 2, 3]
l1[0] #1

t1 = tuple(s1)
t1 #(1, 2, 3)
t1[0] #1

교집합, 합집합, 차집합 구하기

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

<교집합>
s1 & s2 #{4, 5, 6}
s1.intersection(s2) #{4, 5, 6}

<합집합>
s1 | s2 #{1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.union(s2) #{1, 2, 3, 4, 5, 6, 7, 8, 9}

<차집합>
s1 - s2 #{1, 2, 3}
s1.difference(s2) #{1, 2, 3}
s2 - s1 #{8, 9, 7}
s2.difference(s1) #{8, 9, 7}

그 외
<대칭 차집합>
s1^s2 #s1 s2 대칭 차집합

집합 함수

<1개 추가하기(add)>
s1 = set([1, 2, 3])
s1.add(4) #요소 추가
s1 #{1, 2, 3, 4}

<값 여러 개 추가하기(update)>
s1 = set([1, 2, 3])
s1.update([4, 5, 6]) #여러개 요소 추가
s1 #{1, 2, 3, 4, 5, 6}

<특정 값 제거하기(remove)>
s1 = set([1, 2, 3])
s1.remove(2) #요소 삭제
s1 #{1, 3}

출처

개념 출처
코드 출처 (1)
코드 출처 (2)

profile
I believe in myself.

0개의 댓글