Python_Dictionary& Set

36109 단어 pyTILTIL

딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다.예를 들어 Key가 "name"이라면 Value는 "Jiyoung"가 될 것이다. 딕셔너리의 가장 큰 특징은 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하는 것이 아니라 Key를 통해 Value를 얻는다는 점이다. Jiyoung을 찾기 위해 모든 내용을 순차적으로 찾는 것이 아니라 Jiyoung이 위치해 있는 곳만 찾는다.

참조 : https://wikidocs.net/16

기본 구조

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

중괄호 { }를 사용해 딕셔너리를 선언한다. 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다. 또한 Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.

dic = {'name':'Jiyoung', 'age':27, 'birth': '1229'}

key -> 'name', 'age', 'birth'
value => 'Jiyoung', '27', '1229'

element 읽어들이기

기본적인 방법은 리스트와 유사하지만 요소의 index를 사용하는 것이 아니라 key값을 사용한다.

dic['name'] 	#'Jiyoung'

💡작성시 주의사항💡

  • Key는 고유한 값이므로 중복되는 Key은 마지막 key값 제외하고 전부 무시된다.
>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}
  • 리스트는 변하는 값이기 때문에 Key로 사용할 수 없다.(value는 가능) 반대로 튜플은 변하지 않는 값이기 때문에 사용가능하다.

Dictionary에서 새로운 요소(element) 추가하기

dictionary_name[new_key] = new_value

#e.g
dict = {1: 'one', 'two': 2}
dict['three'] = 3

>>>{1: 'one', 'two':2, 'three':3}

만약 동일한 key값에 새로운 value만 주게 되면 그 전의 요소를 무시하고 새로 추가된 요소를 받는다

dict[1] = 'new one'

>>>{1:'new one', 'two':2}
#비어있는 딕셔너리 만들고 추가하는 것도 가능하다

my_dict = { }
my_dict[1] = "one"
my_dict[2] = "two"
>>> {1: 'one', 2: 'two'}

Dictionary 에서 요소 삭제 하기

my_dict = { "one": 1, 2: "two", 3 : "three" }
del my_dict["one"]
print(my_dict)
>>> {2: 'two', 3: 'three'}

Dictionary method

Key 리스트 만들기(keys)

dic = {'name':'Jiyoung', 'age':27, 'birth': '1229'}
dic.keys()

>>>dict_keys(['name', 'age', 'birth'])

#반환값으로 리스트가 필요한 경우는 list(dic.keys())사용

list(dic.keys())

>>> ['name', 'age', 'birth']

Value 리스트 만들기(values)

dic.values()

>>> dict_values(['Jiyoung', 27, '1229'])

list(dic.values())
>>> ['Jiyoung', 27, '1229']

Key, Value 모두 얻기(items)

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다. dict_values 객체와 dict_items 객체 역시 dict_keys 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용할 수 있다.

dic.items()
>>> dict_items([('name', 'Jiyoung'), ('age', 27), ('birth', '1229')])

Key: Value 모두 지우기(clear)

clear 함수는 딕셔너리 안의 모든 요소를 없앤다. 빈 리스트를 [ ], 빈 튜플을 ( )로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다.

dic.clear()
dic

>>> {}

Key로 Value얻기(get)

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. 앞에서 살펴보았듯이 dic.get('name')dic['name']을 사용했을 때와 동일한 결괏값을 돌려받는다.

다만 다음 예제에서 볼 수 있듯이 a['nokey']처럼 존재하지 않는 키(nokey)로 값을 가져오려고 할 경우 a['nokey']는 Key 오류를 발생시키고 a.get('nokey')는 None을 돌려준다는 차이가 있다.

dic = {'name':'Jiyoung', 'age':27, 'birth': '1229'}
dic.get('name')

>>> 'Jiyoung'

dic.get('birth')

>>> '1229'

#존재 하지 않는 key값 가져오기
dic = {'name':'Jiyoung', 'age':27, 'birth': '1229'}
print(dic.get('address'))

>>>None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'address'

만일 딕셔너리 안에 찾으려는 Key 값이 없을 때 미리 정해 둔 디폴트 값을 대신 가져오고 싶다면 get(x, '디폴트 값')을 사용하면 된다.

dic.get('address','mail')
>>>'mail'

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

dic = {'name':'Jiyoung', 'age':27, 'birth': '1229'}
'name' in a dic

>>>True
'address' in dic
>>> False

Set

집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형.
set 키워드를 사용해 만들 수도 있고 set()의 괄호 안에 리스트를 입력하여 만들거나 다음과 같이 문자열을 입력하여 만들 수도 있다. 또한 비어있는 집합 자료형은 다른 자료형들 처럼s = set() 형태로 사용 가능하다.

#기본 형태
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

#괄호 안에 문자열
>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}

위의 예시의 결과값을 보면 무언가 이상한 것을 알 수 있다. set 자료형에는 2가지 큰 특징이 있다.

  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered).
  • 순서가 없으므로 인덱싱도 없다. 즉 몇번째 요소를 읽어들이거나 할 수 없다. (만약 Set에 저장된 값을 인덱싱, 슬라이싱 하고싶다면, 리스트 혹은 튜플로 자료형을 변환한후 가능

중복 제거하는 필터로서의 Set

set함수는 중복을 허용하지 않는다.
다른 자료형에 담긴 데이터 중복을 제거하기 위한 필터 로서의 역할을 한다.

>>> set_ex = [1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 2, 3]
>>> print(set_ex)

[1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 2, 3]

>>> setData = set(set_ex)
>>> print(setData)

{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> listData = list(setData)
>>> print(listData)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

set 함수는 교집합, 합집합, 차집합을 구할 때 유용하게 사용된다.

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

#교집합
>>> s1 & s2			# &사용
{4, 5, 6}
>>> s1.intersection(s2)		#intersection함수 사용
{4, 5, 6}

#합집합
>>> s1 | s2			# | 기호 사용
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2)		# union함수 사용
{1, 2, 3, 4, 5, 6, 7, 8, 9}

#차집합
>>> s1 - s2			# -기호 사용
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s1.difference(s2)		# difference 함수 사용
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}

set method

값 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}

Set 과 Dictionary 의 차이

  1. dictionary의 경우 key와 value값이 존재하지만 set의 경우 key값만 존재한다.
  2. Set은 mutable(가변) 자료형이지만 Dictionary의 key값은 변하지 않는 값이다.

참조 : https://wikidocs.net/16
https://wikidocs.net/1015

좋은 웹페이지 즐겨찾기