파이썬 딕셔너리 퀴즈
문제 · 정답 · 상세풀이 · 예시 코드

OX 10문항 + 5지선다형 10문항

OX 1

문제

파이썬 딕셔너리는 순서가 없는(unordered) 자료구조이다.

정답

X

상세 풀이

Python 3.7부터 딕셔너리는 입력된 순서를 유지합니다. 예전에는 순서를 보장하지 않았지만, 현재 수업 환경에서는 순서가 유지된다고 이해하는 것이 좋습니다.

예시 코드

d = {'첫째': 1, '둘째': 2, '셋째': 3}

for key in d:
    print(key, d[key])

출력 결과

첫째 1
둘째 2
셋째 3
OX 2

문제

딕셔너리의 키(key)는 중복될 수 없다.

정답

O

상세 풀이

딕셔너리의 키는 고유해야 합니다. 같은 키에 값을 다시 넣으면 새 항목이 추가되는 것이 아니라 기존 값이 덮어써집니다.

예시 코드

score = {'수학': 90, '수학': 100}

print(score)
print(len(score))

출력 결과

{'수학': 100}
1
OX 3

문제

딕셔너리의 값(value)으로는 리스트나 다른 딕셔너리를 사용할 수 있다.

정답

O

상세 풀이

딕셔너리의 값에는 거의 모든 파이썬 객체가 올 수 있습니다. 리스트, 튜플, 또 다른 딕셔너리도 값으로 저장할 수 있습니다.

예시 코드

student = {
    'name': '민수',
    'scores': [90, 85, 100],
    'info': {'grade': 1, 'class': 2}
}

print(student['scores'])
print(student['info']['grade'])

출력 결과

[90, 85, 100]
1
OX 4

문제

my_dict['key'] 와 my_dict.get('key')는 존재하지 않는 키에 접근할 때 동일하게 KeyError를 발생시킨다.

정답

X

상세 풀이

대괄호 접근은 키가 없으면 KeyError가 발생하지만, get()은 키가 없을 때 None 또는 지정한 기본값을 반환합니다.

예시 코드

d = {'a': 10}

print(d.get('b'))
print(d.get('b', 0))

출력 결과

None
0
OX 5

문제

del my_dict['key']는 딕셔너리에서 특정 키-값 쌍을 삭제하는 명령어이다.

정답

O

상세 풀이

del 키워드는 지정한 키와 그 키에 연결된 값을 함께 삭제합니다.

예시 코드

d = {'a': 1, 'b': 2}

del d['a']
print(d)

출력 결과

{'b': 2}
OX 6

문제

딕셔너리의 키(key)로는 가변(mutable) 객체인 리스트를 사용할 수 있다.

정답

X

상세 풀이

딕셔너리의 키는 해시 가능해야 합니다. 리스트는 값이 바뀔 수 있는 가변 객체라서 키로 사용할 수 없습니다.

예시 코드

try:
    d = {[1, 2]: '리스트 키'}
except TypeError:
    print('리스트는 키로 사용할 수 없음')

출력 결과

리스트는 키로 사용할 수 없음
OX 7

문제

my_dict.keys() 메서드는 딕셔너리의 모든 키를 포함하는 튜플을 반환한다.

정답

X

상세 풀이

keys()는 튜플이 아니라 dict_keys라는 뷰 객체를 반환합니다. 튜플이나 리스트가 필요하면 tuple(), list()로 변환합니다.

예시 코드

d = {'a': 1, 'b': 2}

print(d.keys())
print(list(d.keys()))

출력 결과

dict_keys(['a', 'b'])
['a', 'b']
OX 8

문제

dict1.update(dict2)는 dict1에 dict2의 내용을 병합하며, 중복된 키가 있으면 dict2의 값으로 덮어쓴다.

정답

O

상세 풀이

update()는 원래 딕셔너리를 직접 수정합니다. 같은 키가 있으면 나중에 들어온 딕셔너리의 값으로 바뀝니다.

예시 코드

d1 = {'a': 1, 'b': 2}
d2 = {'b': 20, 'c': 3}

d1.update(d2)
print(d1)

출력 결과

{'a': 1, 'b': 20, 'c': 3}
OX 9

문제

딕셔너리 컴프리헨션은 리스트 컴프리헨션보다 항상 실행 속도가 빠르다.

정답

X

상세 풀이

항상 빠르다고 말할 수 없습니다. 자료구조의 목적이 다르며, 속도는 데이터 크기와 작업 내용에 따라 달라집니다.

예시 코드

squares_list = [x*x for x in range(3)]
squares_dict = {x: x*x for x in range(3)}

print(squares_list)
print(squares_dict)

출력 결과

[0, 1, 4]
{0: 0, 1: 1, 2: 4}
OX 10

문제

pop() 메서드를 사용하여 딕셔너리에서 아이템을 제거하면, 제거된 아이템의 값이 반환된다.

정답

O

상세 풀이

pop(key)는 해당 키-값 쌍을 삭제하고, 삭제된 키의 값을 반환합니다.

예시 코드

d = {'apple': 1000, 'banana': 1500}

price = d.pop('apple')
print(price)
print(d)

출력 결과

1000
{'banana': 1500}
5지선다 11

문제

다음 중 딕셔너리를 생성하는 방법으로 올바르지 않은 것은?

정답

d = {'a', 1, 'b', 2}

상세 풀이

중괄호 안에 콜론 없이 값만 나열하면 딕셔너리가 아니라 세트가 됩니다. 딕셔너리는 key:value 형태여야 합니다.

예시 코드

d1 = {'a': 1}
d2 = {'a', 1, 'b', 2}

print(type(d1))
print(type(d2))

출력 결과

<class 'dict'>
<class 'set'>
5지선다 12

문제

d = {'a': 100, 'b': 200}; print(d.get('c', 0))의 실행 결과는?

정답

0

상세 풀이

get()은 찾는 키가 없을 때 두 번째 인자로 지정한 기본값을 반환합니다. c 키가 없으므로 0이 출력됩니다.

예시 코드

d = {'a': 100, 'b': 200}

print(d.get('c', 0))

출력 결과

0
5지선다 13

문제

d = {'a': 1}; d['b'] = 2; d['a'] = 3; print(len(d))의 실행 결과는?

정답

2

상세 풀이

b는 새 키라서 추가되고, a는 이미 있는 키라서 값만 3으로 수정됩니다. 따라서 키의 개수는 a, b 두 개입니다.

예시 코드

d = {'a': 1}
d['b'] = 2
d['a'] = 3

print(d)
print(len(d))

출력 결과

{'a': 3, 'b': 2}
2
5지선다 14

문제

딕셔너리의 모든 값을 리스트로 얻기 위한 올바른 코드는?

정답

list(d.values())

상세 풀이

values()는 값들을 보여주는 뷰 객체를 반환합니다. 이것을 리스트로 만들려면 list(d.values())를 사용합니다.

예시 코드

d = {'국어': 90, '수학': 100}

print(d.values())
print(list(d.values()))

출력 결과

dict_values([90, 100])
[90, 100]
5지선다 15

문제

다음 중 딕셔너리의 키(key)로 사용할 수 없는 자료형은?

정답

list

상세 풀이

리스트는 mutable 자료형이므로 해시할 수 없습니다. 그래서 딕셔너리의 키로 사용할 수 없습니다.

예시 코드

good_key = ('학번', 101)

d = {good_key: '가능'}
print(d[good_key])

try:
    bad = {[1, 2]: '불가능'}
except TypeError:
    print('list는 키 불가')

출력 결과

가능
list는 키 불가
5지선다 16

문제

d = {'a': 1, 'b': 2}; d.pop('a'); print(d)의 실행 결과는?

정답

{'b': 2}

상세 풀이

pop('a')는 a 키와 그 값을 제거합니다. 남는 것은 b 키뿐입니다.

예시 코드

d = {'a': 1, 'b': 2}
d.pop('a')

print(d)

출력 결과

{'b': 2}
5지선다 17

문제

두 딕셔너리 d1={'a':1}, d2={'b':2}를 병합하는 방법으로 틀린 것은?

정답

d1 + d2

상세 풀이

딕셔너리는 + 연산자로 병합할 수 없습니다. update(), {**d1, **d2}, Python 3.9 이상의 | 연산자를 사용할 수 있습니다.

예시 코드

d1 = {'a': 1}
d2 = {'b': 2}

print({**d1, **d2})

try:
    print(d1 + d2)
except TypeError:
    print('딕셔너리는 + 병합 불가')

출력 결과

{'a': 1, 'b': 2}
딕셔너리는 + 병합 불가
5지선다 18

문제

d = {'x': 10, 'y': 20}; print('x' in d)의 실행 결과는?

정답

True

상세 풀이

딕셔너리에서 in 연산자는 값이 아니라 키의 존재 여부를 검사합니다. x 키가 있으므로 True입니다.

예시 코드

d = {'x': 10, 'y': 20}

print('x' in d)
print(10 in d)

출력 결과

True
False
5지선다 19

문제

d = {x: x*x for x in range(3)}; print(d)의 실행 결과는?

정답

{0: 0, 1: 1, 2: 4}

상세 풀이

range(3)은 0, 1, 2를 만듭니다. 각 x를 키로, x*x를 값으로 저장하므로 제곱 딕셔너리가 됩니다.

예시 코드

d = {x: x*x for x in range(3)}

print(d)

출력 결과

{0: 0, 1: 1, 2: 4}
5지선다 20

문제

d.setdefault('a', [])의 동작에 대한 설명으로 가장 정확한 것은?

정답

'a' 키가 없으면 d['a'] = [] 를 실행하고 현재 값을 반환

상세 풀이

setdefault()는 키가 있으면 기존 값을 반환하고, 키가 없으면 기본값을 넣은 뒤 그 값을 반환합니다.

예시 코드

d = {}

value = d.setdefault('a', [])
value.append(10)

print(d)

출력 결과

{'a': [10]}