일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- docker
- socket io
- SAA
- SSA
- 카톡
- 중급파이썬
- S3
- async
- 채팅
- MongoDB
- Vue
- flask
- git
- react
- 튜플
- merge
- pandas
- lambda
- AWS
- RDS
- EC2
- Class
- 파이썬
- dict
- Props
- node
- TypeScript
- crud
- NeXT
- wetube
- Today
- Total
초보 개발자
13강 dict의 생성과 zip 본문
[dict의 다양한 생성 방법]
일반적인 딕셔너리의 생성방식은 다음과 같다!!
d = {'a':1,'b':2,'c':3}
d
{'a':1,'b':2,'c':3}
그리고 딕셔너리는 dict라는 클라스의 객체이다
type({}) # 빈 딕셔너리 전달하면서 type함수 호출
<class 'dict'>
따라서 dict클래스의 객체를 직접 생성하는 형태로도 딕셔너리를 만들 수 있다.
물론 생성 방법에 차이가 있을 뿐 만들어진 결과물은 동일하다.
d = dict([('a'),1,('b',2),('c',2)]) # 또 다른 딕셔너리 생성 방법
d
{'a':1,'b':2,'c':3}
튜플들을 묶어서 리스트 안에 넣었다.
딕셔너리의 키가 문자열인 경우에는 다음과 같이 생성할 수도 있다.
이 경우 a,b,c는 안그럴거같지만 문자열로 인식이된다.
d = dict(a=1,b=2,c=3) # 키가 문자열인 딕셔너리 생성방법
d
{'a':1,'b':2,'c':3}
또 하나 키는 키끼리 값은 값끼리 리스트에 묶어서 딕셔너리를 생성하는 방법도 있다. 단 이때는 zip이라는 함수를 사용해야 한다.
d = dict(zip(['a','b','c'],[1,2,3])) # 키와 값을 별도로 묶어서 딕셔너리 생성
d
{'a':1,'b':2,'c':3}
zip의 왼쪽에 있는 애들이 키로 사용, 오른쪽이 값으로 사용 되었다.
d1 = {'a':1,'b':2,'c':3}
d2 = dict([('a',1),('b',2),('c',2)])
d3 = dict(a=1,b=2,c=3)
d4 = dict(zip(['a','b','c'],[1,2,3]))
d1 == d2 == d3 == d4 # 내용 비교, 만드는 방법은 달라도 똑같은 결과물
True
딕셔너리는 원래 저장 순서를 보장하지 않는다. 사탕 통에 담긴 사탕과 비슷 어떤 사탕이 처음 들어왔을까? -> 모름
근데 파이썬 3.7버전 부터는 저장 순서를 보장하고 있다고 한다. -> 파이썬 만의 독특한 특징으로 보자
d = {'a':1,'b':2,'c':3}
d['d'] = 4
d
{'a':1,'b':2,'c':3,'d':4}
for k in d:
print(d[k], end=', ')
1, ,2 ,3, 4
이렇게 순서대로 출력이 되는 것을 확인할 수 있다.
원래 딕셔너리는 보장하지 않는데 파이썬에서는 서비스차원에서 보장은 해주고 있다.
[zip 함수]
zip은 쉽게 말하면 분배하는 것과 같다.
학생 10명이 있다. 그리고 빵집에서 빵 10개와 슈퍼에서 우유 10개를 사왔다.
학생 1명에게 빵하나 우유하나를 주려고 한다. 근데 봉지에 빵 1개와 우유 1개를 담아서 그 봉지를 학생 10명에게 나눠주는 방법이 zip을 사용한 것이라고 보면 될 것 같다.
z = zip(['a','b','c'],[1,2,3]) # 두 개의 리스트에 저장된 값들을 조합
for i in z:
print(i, end = ', ')
('a', 1), ('b', 2), ('c', 3)
zip은 첫 번째 인자로 저장된 값들, 두 번째 인자로 저장된 값들 순서대로 하나씩 뽑아서 튜플로 만든 후 어떤 저장소에 담아둔다. 그리고 그 저장소에 접근할 수 있는 iterable(iterator)를 반환한다.
물론 리스트말고 튜플이 zip의 인자에 들어와도 된다. 심지어 문자열도 상관없다고 한다.
z = zip(('a','b','c'),(1,2,3)) # 두 개의 튜플에 저장된 값들을 조합
for i in z:
print(i, end = ', ')
('a',1), ('b', 2), ('c', 3)
z = zip("abc",(1,2,3)) # 문자열과 튜플에 저장된 값들을 조합
for i in z:
print(i, end = ', ')
('a',1), ('b', 2), ('c', 3)
zip이 반환하는 객체는 for 루프에 둘 수 있다 -> 이는 iterable객체임을 나타낸다.
이를 또 list와 조합하여 사용할 수도 있다.
d = list(zip(('a','b','c'),(1,2,3))) # zip과 list의 조합
d
[('a',1),('b',2),('c',3)]
list도 되면 뭐다?? tuple도 된다.
t = tuple(zip('abc','123')) # zip과 tuple의 조합
t
(('a',1),('b',2),('c',3))
또 dict함수와도 조합할 수 있다.
d = dict(zip(['a','b','c'],(1,2,3))) # zip과 dict의 조합
d
{'a':1,'b':2,'c':3}
zip은 값들을 나누어 저장해야 할 때 유용하게 쓰일 수 있다.
물론 3개의 값을 나눌 수도 있다. 엄청 간단하게 할 수 있다. 인자에 문자열 튜플 리스트 뭐가오든 상관 없다
c = list(zip('abc',(1,2,3),['one','two','three]))
c
[('a',1,'one'),('b',2,'two'),('c',3,'three')]
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
15강 함수 호출과 매개변수 선언에 있어서 *와 **의 사용규칙 (0) | 2021.12.22 |
---|---|
14강 dict의 루핑 기술과 컴프리헨션 (0) | 2021.12.22 |
12강 네임드 튜플 (0) | 2021.12.22 |
11강 튜플의 패킹과 언패킹 (0) | 2021.12.22 |
10강 제너레이터 표현식 (0) | 2021.12.16 |