Python | 딕셔너리 & 세트 자료형

Sua·2020년 12월 15일
0

Python

목록 보기
5/28
post-thumbnail

딕셔너리

리스트와 튜플은 값 여러 개를 일렬로 저장할 뿐 값끼리 연관 관계가 없었다. 파이썬에서는 연관된 값을 묶어서 저장하는 용도로 딕셔너리라는 자료형을 제공한다.

딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다. 즉, 사전(dictionary)에서 단어를 찾듯이 값을 가져올 수 있다고 하여 딕셔너리라고 부른다.

딕셔너리 생성하기

중괄호로 딕셔너리 만들기

딕셔너리는 { }(중괄호) 안에 키: 값 형식으로 저장하며 각 키와 값은 ,(콤마)로 구분해준다.

딕셔너리 = {키1: 값1, 키2: 값2}

dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

비어 있는 딕셔너리는 a = dict()로 생성할 수도 있다.

  • 키와 값을 1:1 관계로 저장한다.
  • 키가 중복되면 가장 뒤에 있는 값만 사용한다. 중복되는 키는 저장되지 않는다.
  • 키에는 리스트와 딕셔너리를 사용할 수 없다. 값에는 리스트, 딕셔너리 등을 포함하여 모든 자료형을 사용할 수 있다.

dict로 딕셔너리 만들기

dict는 다음과 같이 키와 값을 연결하거나, 리스트, 튜플, 딕셔너리로 딕셔너리를 만들 때 사용한다.

1) 딕셔너리 = dict(키1=값1, 키2=값2)
키=값 형식으로 딕셔너리를 만들 수 있다. 이때는 키에 ' '(작은따옴표)나 " "(큰따옴표)를 사용하지 않아야 한다.

x = dict(a=900, f=60)

2) 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
딕셔너리 = dict(zip((키1, 키2), (값1, 값2)))
키가 들어있는 리스트와 값이 들어있는 리스트를 차례대로 zip에 넣은 뒤 다시 dict에 넣어준다. 튜플에 저장해도 된다.

x = dict(zip[a, f], [900, 60])

3) 딕셔너리 = dict([(키1, 값1), (키2, 값2)])
리스트 안에 (키, 값) 형식의 튜플을 나열한다.

4) 딕셔너리 = dict({키1: 값1, 키2: 값2})
dict 안에서 중괄호로 딕셔너리를 생성한다.

dict.fromkeys : 리스트와 튜플로 딕셔너리 만들기

1) dict.fromkeys(키리스트)
키리스트로 딕셔너리를 생성하며 값은 모두 None으로 저장한다. 튜플도 된다.

keys = ['a', 'b', 'c', 'd']
x = dict.fromkeys(keys)
x # {'a': None, 'b': None, 'c': None, 'd': None}

2) dict.fromkeys(키리스트, 값)
키 리스트와 값을 지정하면 해당 값이 키의 값으로 저장된다.

y = dict.fromkeys(keys, 100)
y # {'a': 100, 'b': 100, 'c': 100, 'd': 100}

딕셔너리 다루기

  • 딕셔너리[키] : 딕셔너리 키를 사용하여 값 얻기
  • 키 in 딕셔너리 : 딕셔너리에 키가 있는지 확인하기, True 또는 False를 결괏값으로 반환
  • 딕셔너리[키] = 값 : 딕셔너리 키에 값 추가하기, 해당 키와 값이 있을 경우 값이 변경되고, 해당 키가 없으면 키가 추가되고 값이 할당
  • del 딕셔너리[키] : 딕셔너리 요소 삭제하기

딕셔너리 내장함수

  • len(딕셔너리) : 딕셔너리 키 개수 구하기(키와 값은 1:1 관계이므로 키의 개수는 곧 값의 개수)

딕셔너리 메소드

  • 딕셔너리.keys() : 키 리스트 가져오기, 딕셔너리의 Key만을 모아서 dict_keys 객체를 돌려줌(참고사이트)
  • 딕셔너리.values() : 값 리스트 가져오기
  • 딕셔너리.items() : 키, 값 쌍 모두 가져오기
  • 딕셔너리.get(키) : 키를 사용하여 값 얻기
  • 딕셔너리.get(키, 기본값) : 딕셔너리 안에 찾으려는 Key 값이 없을 경우 디폴트 값을 대신 가져옴

    딕셔너리[키]딕셔너리.get(키)의 차이
    존재하지 않는 키로 값을 가져오려고 할 경우 딕셔너리[키]는 Key 오류를 발생시킨다. 반면, 딕셔너리.get(키)는 None을 돌려준다는 차이가 있다.

  • 딕셔너리.setdefault(키, default=None) : 딕셔너리에 키-값 쌍을 추가. 단, setdefault에 기본값 없이 키만 지정하면 값에 None을 저장
  • 딕셔너리.update(키1 = 값1, 키2 = 값2) : 키의 값 수정하기, 키가 문자열일 때만 사용, 키가 없으면 키와 값을 추가
  • 딕셔너리.update({키1: 값1, 키2: 값2}) : 키의 값 수정하기,키가 숫자일 경우
  • 딕셔너리.update([[키1, 값1], [키2, 값2]]) : 리스트를 이용해 키의 값 수정하기
  • 딕셔너리.update(((키1, 값1), (키2, 값2))) : 튜플을 이용해 키의 값 수정하기
  • 딕셔너리.update(zip([키1, 키2], [값1, 값2])) : 키 리스트와 값 리스트를 묶은 zip 객체로 값을 수정

    setdefault와 update의 차이
    setdefault는 키-값 쌍 추가만 할 수 있고, 이미 들어있는 키의 값은 수정할 수 없다. 하지만 update는 키-값 쌍 추가와 값 수정이 모두 가능하다.

  • 딕셔너리.clear() : 모든 키, 값 지우기
  • 딕셔너리.pop(키) : 특정 키-값 쌍을 삭제한 뒤 삭제한 값을 반환
  • 딕셔너리.pop(키, 기본값) : 기본값을 지정하면 해당 키가 없을 때 기본값만 반환
  • 딕셔너리.popitem() : 마지막 키-값 쌍을 삭제(파이썬 3.6 이상), 임의의 키-값 쌍을 삭제(파이썬 3.5 이하)

세트

세트(set)는 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다. 세트는 합집합, 교집합, 차집합 등의 연산이 가능하다.

1) 세트는 중복을 허용하지 않는다

  • 자료형의 중복을 제거하기 위한 필터 역할로 종종 사용한다.

2) 세트는 순서가 없다.(Unordered)

  • 인덱싱으로 자료형의 값을 얻을 수 없다.
  • set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환한후 해야 한다.

3) 세트는 리스트, 딕셔너리와 달리 세트 안에 세트를 넣을 수 없다.

세트 생성하기

세트는 { }(중괄호) 안에 값을 저장하며 각 값은 ,(콤마)로 구분해준다. 또한 set 키워드를 사용해서도 만들 수 있다. (빈 집합은 c = set()로 만든다)

  • 세트 = {값1, 값2, 값3}
  • set(반복가능한객체)

파이썬은 내용을 변경할 수 없는 세트도 제공한다. 집합 연산과 메서드에서 요소를 추가하거나 삭제하는 연산, 메서드는 사용할 수 없다.

  • 프로즌세트 = frozenset(반복가능한객체)

그렇다면 frozenset는 왜 사용할까? frozenset는 세트 안에 세트를 넣고 싶을 때 사용한다.

집합 연산

합집합

  • 세트1 | 세트2
    set.union(세트1, 세트2)

교집합

  • 세트1 & 세트2
    set.intersection(세트1, 세트2)

차집합

  • 세트1 - 세트2
    set.difference(세트1, 세트2)

대칭차집합

  • 세트1 ^ 세트2
    set.symmetric_difference(세트1, 세트2)

두 집합 중 겹치지 않는 요소만 포함

세트 다루기

  • 값 in 세트 : 집합에 특정 값이 있는지 확인하기, True 또는 False로 반환
  • 값 not in 세트 : 집합에 특정 값이 없는지 확인하기

세트 내장함수

  • len(set) : 집합의 요소 개수 구하기

세트 메소드

  • set.add(요소) : 집합에 요소 추가하기
  • set.remove(요소) : 집합에서 특정 요소를 삭제하고 요소가 없으면 에러를 발생시킨다.
  • set.discard(요소) : 집합에서 특정 요소를 삭제하고 요소가 없으면 그냥 넘어간다.
  • set.pop() : 집합에서 임의의 요소 삭제하기
  • set.clear() : 집합의 모든 요소 삭제하기

Dictionary와 Set의 비교

공통점

  • 중복 불가
  • 순서 없음
  • 변경 가능(mutable)

차이점

profile
Leave your comfort zone

0개의 댓글