딕셔너리 자료형(DICTIONARY TYPE)
- 딕셔너리 자료형은 비 시퀀스 자료형입니다. 따라서 인덱스를 갖지 않습니다.
- 대신 이 자료형은 고유한 키(KEY) 값을 갖습니다. 이 키(KEY)는 1대1로 매칭 되는 값(VALUE)를 갖습니다.
- 이를 KEY-VALUE PAIR라고하며 딕셔너리 자료형의 특징입니다.
- 중괄호({})를 활용하여 딕셔너리 자료형을 생성할 수 있습니다.
- 중괄호 안에는 KEY-VALUE PAIR를 작성하며 형태는 KEY:VALUE와 같습니다. KEY-VALUE PAIR는 콤마로 구분지어 요소로 등록할 수 있습니다.
- dic_var = {'key':'value'}
- dictionary_variable = {key: value, key: value}
딕셔너리 키(Key) 중복
- 딕셔너리 자료형에서 키(key)는 중복해서 존재하지 않습니다. 만약 중복해서 넣게되면 가장 마지막 것만 남습니다.
딕셔너리 사용 가능 리터럴
- 딕셔너리 자료형에서 키는 문자열, 정수, 실수 ,불(bool), 튜플을 활용할 수 있습니다.
- 또 키에 이 자료형을 섞어서 사용해도 됩니다.
- 단 키에는 리스트, 딕셔너리, 집합을 사용할 수 없습니다.
- 키는 고유한 값을 가져야합니다. (인덱스에 겹치는 숫자가 없듯이)
- 딕셔너리 자료형에서 값(value)는 모든 자료형을 사용할 수 있습니다.
빈딕셔너리 생성하기
비어있는 빈 딕셔너리를 만들 때는 중괄호({})만 쓰거나 인자 없이 dict() 함수를 사용하면 됩니다.
empty_dict = {}
print(empty_dict)
print(type(empty_dict))
empty_dict = dict()
print(empty_dict)
print(type(empty_dict))
dict 함수로 생성하기
- dict 함수에 키워드 인자값을 활용하면 딕셔너리를 만들 수 있습니다. 함수에 사용하는 키워드 인자의 키워드 부분은 변수명처럼 따옴표('',"")를 사용하지 않습니다.
dict_a = dict(key = "value", key2 = "value2", key3 = "value3")
print(dict_a)
dict 함수와 시퀀스 객체로 생성하기
- 키와 값을 한쌍을 갖는 시퀀스 객체를 요소로 갖는 시퀀스 객체를 생성하여 딕셔너리 자료형으로 만들 수 있습니다.
dict[("key","value"),("key2","value2")
dict() 함수와 zip()함수로 생성하기
zip() 함수를 통해서 키와 값 한쌍을 갖는 튜플을 요소로 갖는 객체로 딕셔너리 자료형을 생성할 수 있습니다.
# 하지만 둘 중 하나가 길이가 작을 경우, 작은 것을 기준으로 만들 수 있음
dict_b = dict(zip(["key","key2","key3"],["value","value2","value3"]))
키로 값에 접근하기
- 인덱싱과 마찬가지입니다. 다만 인덱싱은 0 이상의 정수를 활용하여 각 요소에 접근하지만 딕셔너리 자료형은 키를 활용하여 해당 값에 접근합니다.
print(dict_b)
print(dict_b['key'])
키로 값 변경하기
키를 통해 접근한 요소에 할당하면 해당 값을 변경할 수 있습니다.
print(dict_b)
dict_b['key'] = 'super value'
print(dict_b)
키와 값 추가하기
딕셔너리 자료형에 없는 키를 활용하여 값을 할당하면 딕셔너리 자료에 새로운 키와 값의 쌍이 추가됩니다.
print(dict_b)
dict_b('new one'] = 'new value'
print(dict_b)
없는 키에 접근하는 경우
범위를 벗어난 인덱스에 접근하면, 에러가 발생하듯이 딕셔너리 자료형에서도 존재하지 않는 키를 접근하려면
key error가 발생합니다.
특정 키가 딕셔너리 자료형에 있나 확인
딕셔너리 자료형에서 특정 키가 존재하는 지 확인 할 때 in 연산자를 활용할 수 있습니다.
print(dict_d)
print('key' in dict_d)
특정 키와 값의 쌍을 삭제하기
- 딕셔너리 자료형에서는 del 키워드를 활용하여 특정 키와 값의 쌍을 삭제할 수 있습니다.
del dict_a['new_one']
키와 값의 쌍 개수 구하기
- 키와 값은 1대1로 한쌍을 이룹니다. len(함수)를 통해 딕셔너리 자료형의 크기를 구하면 그건 키의 개수(계수)이기도 하고, 값의 크기(개수)이기도 합니다.
zip 안에 리스트를 하나만 넣으면?
names = ['우상욱', '김민중', '우상국']
zip(names)
# 결과값 : [['우상욱', '김민중', '우상국']]
# dict[[names]]
예제 문제
# zip으로 구현
names = input('이름을 기입해주세요').split()
weight = map(float, input('몸무게를 입력해주세요').split())
info = dict(zip(names, weight))
print(info)
# for문 딕셔너리 구현
names = ['스누피', '뽀로로', '만리장성']
weight = [123, 232, 2323]
dict = {}
for idx, name in enumerate(names):
dict[name] = weight[idx]
dict
리스트 컴프리헨션(list comprehension)
- 리스트 컴프리헨션은 대괄호([]) 안에 표현식과 for문을 작성하여 사용할 수 있습니다.
- list_variable = [expression for 변수 in iterable]
- **list_varliable = [expression for 변수 in iterable if 조건식]
- 리스트 컴프리헨션 동작순서
- 반복 가능한 객체(iterable)로부터 값을 하나 꺼내와서 변수에 담습니다.
- 요소를 담은 변수를 활용해서 표현식(expression)을 실행합니다.(이 때 변수를 활용하지 않을 수 있습니다)
- 표현식 결과 값을 리스트 요소에 넣습니다.
- 반복가능한 객체(iterable)로부터 값이 없을 때까지 1~3과정을 반복합니다.
# 사용 예시1
list_a = [_ ** 2 for _ in range(10)]
list_b = [print("Hello World") for _ in range(10)]
# 해당 list_b의 반환값은 없다. print문 자체가 반환 값이 없기 때문
# 사용 예시2(함수 사용해서 응용 가능!!)
def calculator(x):
return x ** 2 + 35 - 22.2
prac_result = [calculator(x) for x in list(range(1,10))]
print(prac_result)
# 사용 예시3(if문)
prac_result2 = [x for x in range(1,10) if x % 2 == 1]
print(prac_result2)
# 사용 예시4(리스트 결합)
prac_result4 = [str(x) for x in list(range(2,11))] + [x for x in 'JQKA']
print(prac_result4)
# 사용 예시5(반환 값 없이 프린트)
prac_result5 = [prac_result4 for x in range(1,5)]
print(prac_result5)
### 예제문제
length = int(input('순환할 숫자를 입력하세요'))
count = 0
while count < length:
list_ = [x + count - 10 if x + count > 10 else x + count for x in range(1, length + 1)]
for i in list_:
print(i, end = '\t')
print()
count += 1
### 결과값
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 1
3 4 5 6 7 8 9 10 1 2
4 5 6 7 8 9 10 1 2 3
5 6 7 8 9 10 1 2 3 4
6 7 8 9 10 1 2 3 4 5
7 8 9 10 1 2 3 4 5 6
8 9 10 1 2 3 4 5 6 7
9 10 1 2 3 4 5 6 7 8
10 1 2 3 4 5 6 7 8 9
중첩된 리스트 컴프리헨션
[expression for 변수 in iterable for 변수 in iteralbe] <- 뒤에 있을 수록 안 쪽 for문
리스트 컴프리헨션은 여러줄로 입력해도 됩니다. 이 때 대괄호 범위 안에서는 들여쓰기로 인한 에러가 생기지 않습니다. 대괄호라는 것으로 범위가 명확하기 때문입니다. 그렇다면 복합적인 리스트 컴프리헨션을 작성할 때는 가독성을 위해서 아래와 같이 들여쓰기를 하는 것이 좋습니다.
[expression for 변수 in iterable
for 변수 in iterable
for 변수 in iterable
for 변수 in iterable]
중첩된 리스트
리스트 안에 리스트를 포함할 수 있습니다
easy_list = [[1,2,3,4,5][3,4]]
for item in easy_list:
for i in item:
print(i)
리스트 안에 단지 리스트가 있을 뿐입니다. 인덱싱으로 얻은 결과가 리스트여서 거기에 또 인덱싱을 또 한 것이라고 이해하면 됩니다.
- easy_list[0] = [1,2,3,4,5]
- easy_list[0][0] = 1
- easy_list[0][1] = 2
- easy_list[0][2] = 3
- easy_list[0][3] = 4
- easy_list[0][4] = 5
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(tuple, random, set) (0) | 2023.01.11 |
---|---|
[Python] 메모리에 객체를 저장하는 구조 (0) | 2023.01.11 |
[Python] 기초 정리(for문, range의 활용, while문, break, continue) (0) | 2023.01.06 |
[Python] 기초 정리(함수, 리스트 메서드, 리스트 Stack처럼 활용, unpakcing, map, if문 등) (1) | 2023.01.05 |
[Python] 기초 정리(지수표기법, 2진법, 개행문자, literal 등) (0) | 2023.01.05 |