본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 13. dict의 생성과 zip

출처 : 윤성우의 열혈 파이썬 : 중급

13. dict의 생성과 zip

d1 = {'a': 1, 'b': 2, 'c': 3}
print(d)    # {'a': 1, 'b': 2, 'c': 3}

type({})    # <class 'dict'>

# dict 클래스 직접 생성
d2 = dict([('a', 1), ('b', 2), ('c', 3)])

# 딕셔너리 키가 문자열인 경우
d3 = dict(a = 1, b = 2, c = 3)

# zip 함수 이용
d4 = dict(zip(['a', 'b', 'c'], [1, 2, 3]))

assert(d1 == d2 == d3 == d4)
  • 원래 딕셔너리와 같은 성격의 저장소는 저장 순서를 보장하지 않음
  • 파이썬 버전 3.7부터는 저장 순서를 보관

저장 순서 보관

d = {'a': 1, 'b': 2, 'c': 3}
d['d'] = 4
print(d)    # {'a':1, 'b': 2, 'c': 3, 'd': 4}

for k in d:
    print(d[k], end = ', ')     # 1, 2, 3, 4

zip 함수

# 두 개의 리스트에 저장된 값들의 조합
z = zip(['a', 'b', 'c'], [1, 2, 3])
for i in z:
    print(i, end = ', ')        # ('a', 1), ('b', 2), ('c', 3)

# 두 개의 튜플에 저장된 값들의 조합
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 객체)
  • zip은 인자로 전달된 리스트/튜플/문자열을 조합해서 다수의 튜플을 만들어 내는데, 같은 위치에 있는 값들끼리 조합해서 튜플을 만들어 낸다
d = list(zip(['a', 'b', 'c'], [1, 2, 3]))
print(d)    # [('a', 1), ('b', 2), ('c', 3)]

t = tuple(zip('abc', '123'))
print(t)    # (('a', '1'), ('b', '2'), ('c', '3'))

d = dict(zip(['a', 'b', 'c'], (1, 2, 3)))
print(d)    # {'a': 1, 'b': 2, 'c': 3}

c = list(zip(['a', 'b', 'c'], (1, 2, 3), ['one', 'two', 'three']))
print(c)    # [('a', 1, 'one'), ('b', 2, 'two'), ('c', 3, 'three')]