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