[PYTHON] Dictionary와 Set, List와 Tuple
Set과 Dictionary, List와 Tuple 참 비슷하지만 다른 구석이 있는 데이터 타입이다.
우선 가장 기초적인 데이터 타입이 되는 list부터 보자
arsenal = ["Tierny", "Ben White", "Gabriel", "Bellerín", "Partey", "Xhaka", "Aubameyang", "Smith Rowe" , "Saka", "Lacazette"]
리스트로 정보표현이 이름밖에 되지 않는다. 이름을 기준으로 좀더 데이터를 넣고 싶을땐 어떻게 할까?
이때 필요한게 Dictionnary 이다.
아시다시피 Dictionnary 형식 { KEY값 : VALUE값 }
arsenal_tierney = { "실명" : "Kieren Tierney", "포지션" : "LB" }
이때 포지션를 추가할려면 직접 딕셔너리 값에 넣는 방법도 있지만
arsenal_tierney = { "실명" : "Kieren Tierney" }
arsenal_tierney["포지션"] = "LB"
1. Dictionary에서 요소(element) 읽어들이기
딕셔너리는 list 의 elementfmf 읽어 들이는 것과 비슷한데 차이점은 index값이 아니라 key 값으로 element를 호출한다.
arsenal_tierney = { "실명" : "Kieren Tierney"}
arsenal_tierney[실명]
> 'Kieren Tierney'
여기서 중요한게 key값은 중복되게 세팅하면 안된다는 것이다.
만일 이미 존재하는 key값이 또 추가되면 기존의 key값이 덮어쓰여지게 된다.
dict1 = { 1 : "one", 1 : "two" }
print(dict1)
> { 1: "two" }
2. 수정하기
my_dict = { "one": 1, 2: "two", 3 : "three" }
my_dict["four"] = 4
print(my_dict)
> {'one': 1, 2: 'two', 3: 'three', 'four': 4}
my_dict = { }
my_dict[1] = "one"
my_dict[2] = "two"
> {1: 'one', 2: 'two'}
3. 삭제하기
key값과 value 값이 함께 지워진다.
my_dict = { "one": 1, 2: "two", 3 : "three" }
del my_dict["one"]
print(my_dict)
> {2: 'two', 3: 'three'}
Dictionary와 Set의 차이
set(집합) : 수학에서의 집합 개념. 순서가 없고 집합안에서 unique값 mutable객체.
- 중괄호 사용은 딕셔너리와 비슷하지만 key값이 없는 것이 특징, 값만 존재한다
s = {3, 5, 7}
type(s)
> <class 'set'>
s
> {3 , 5, 7 }
- set(집합) 내부 원소는 다양한 값을 함께 가질 수 있지만, mutable(변하기쉬운)한 값은 가질수 없다.
- => list, set, dict 는 가질 수 없고 tuple값은 가질 수 있다
>>> s = {"1", 3, 5, (1,3)}
>>> s
{(1, 3), 5, 3, '1'}
>>> s = {"1", 3, 5, [1,3]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> s = {"1", 3, 5, {1,3}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> s = {"1", 3, 5, {1:1,3:3}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> s = {"1", 3, 5, frozenset([1,3,4])}
>>> s
{5, 3, '1', frozenset({1, 3, 4})}
set 선언 : 단순히 중괄호 { } 로만 선언할 경우 dict로 인식 따라서
s = set( [1, 2, 3, 4, 5 ])
s = set([1,3,5,7])
> s
> {1, 3, 5, 7}
p = {1, 3, 5, 7}
> p
> {1, 3, 5, 7}
set 특징 : 중복값 제거, 순서가 없음
s = {1, 5, 1, 1, 1, 3, 7}
s
> {1, 3, 5, 7}
for i in {1, 2, 4, 8, 16,32}:
print(i)
>32
>1
>2
>4
>8
>16
set(집합)의 in
r = {1, 2, 4, 6, 8}
2 in r
>True
3 in r
>False
3 not in r
>True
set(집합) : 원소추가 /update/ 원소제거 /복사 메소드
1. add (원소추가)
k = {100, 105}
k.add(50)
k
>{105, 50, 100}
2. update( [element] ) :
딕셔너리에서 여러값을 수정 또는 추가하는데 사용
but set은 중복은 자동으로 제거되고 수정이라는 개념보다 여러데이터를 한번에 추가할때 사용.
k = {1, 2, 3}
k.update([3, 4, 5])
k
>{1, 2, 3, 4, 5}
3. remove(item)
k = {1, 2, 3}
k.remove(3)
k
{1, 2}
4. copy()
s = {1, 3, 5}
t = s.copy()
s
>{1, 3, 5}
t
>{1, 3, 5}
#set값이기에 순서가 없다.
id(s)
>4334668264
id(t)
>4334666696
특히 set집합에서의 연산자가 중요하다.
합집합 |
교집합 &
차집합 -
대칭차집합 (합집합 - 교집합)
연산 메소드 :
합집합 union
교집합 intersection
차집합 difference
대칭차집합 symmetric_difference
set(집합) : 기타 메소드 (부분집합확인,
issubset : 부분집합 여부 확인
>>> a = {1, 2, 3, 4, 5}
>>> b = {1, 2, 3}
>>> a.issubset(b)
False
>>> b.issubset(a)
True
issuperset : issubset과 반대 superset인지 확인
>>> a = {1, 2, 3, 4, 5}
>>> b = {1, 2, 3}
>>> a.issuperset(b)
True
>>> b.issuperset(a)
False
isdisjoint : 교집합이 없으면 True, 있으면 False
>>> a = {1, 2, 3}
>>> b = {4, 5, 6}
>>> a.isdisjoint(b)
True
>>> c = {1, 2, 3}
>>> d = {3, 4, 5}
>>> c.isdisjoint(d)
False
List 와 Tuple 의 차이
list 는 값을 변경할 수 있지만 tuple은 값을 변경할 수 없다.
좌표나 위치정보등 변하지 말아야할 정보는 튜플값으로 저장하는 것이 좋다. 리스트에 비해 튜플이 더 적은 메모리를 소모하고 처리 속도도 빠르다는 장점이 있다.
tuple 선언시 주의해야할 점!
1. 튜플이 1개의 데이터를 가질때 뒤에 꼭 ,를 붙여 튜플임을 상기시켜야 한다.
2. 튜플의 요소값 수정은 안된다. 삭제,정렬, 추가 모두 안된다.
3. 만약 튜플값을 수정하고 싶다면 ? 리스트로 변환한뒤 수정하자. list ( (set) )
4. 만약 튜플에 포함된 요소 개수가 궁금하다면: count( )
5. 다시 튜플로 바뀌고 싶다면 tuple ( ( list ) )