keys() 와 sorted() 비교
이전 단계에서는 sorted() 함수를 keys() 메서드와 함께 사용하여 딕셔너리를 정렬된 순서로 반복하는 방법을 배웠습니다. 이 단계에서는 keys()를 직접 사용하는 것과 keys()와 함께 sorted()를 사용하는 것의 차이점을 더 자세히 살펴보겠습니다. 이러한 차이점을 이해하는 것은 효율적이고 읽기 쉬운 Python 코드를 작성하는 데 매우 중요합니다.
keys() 메서드는 딕셔너리의 키에 대한 동적 뷰인 뷰 객체 (view object) 를 반환합니다. 즉, 딕셔너리가 변경되면 뷰 객체는 해당 변경 사항을 반영합니다. 그러나 뷰 객체 자체는 리스트가 아니며 직접 정렬을 지원하지 않습니다.
반면에 sorted() 함수는 반복 가능한 객체의 모든 항목을 오름차순으로 포함하는 새 리스트를 반환합니다. sorted(my_dict.keys())를 사용하면 딕셔너리의 키를 정렬한 새 리스트를 생성하여 원래 딕셔너리와 해당 뷰 객체를 변경하지 않습니다.
예시를 통해 이를 설명해 보겠습니다. VS Code 편집기를 사용하여 ~/project 디렉토리에서 sort_keys.py 파일을 열고 다음과 같이 수정합니다.
## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}
## Get the keys view object
keys_view = my_dict.keys()
## Print the keys view object
print("Keys view object:", keys_view)
## Print the sorted keys
sorted_keys = sorted(my_dict.keys())
print("Sorted keys:", sorted_keys)
## Modify the dictionary
my_dict["d"] = 4
## Print the keys view object again
print("Keys view object after modification:", keys_view)
## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
print(f"Key: {key}, Value: {my_dict[key]}")
이 코드에서:
my_dict라는 딕셔너리를 생성합니다.
my_dict.keys()를 사용하여 키 뷰 객체를 가져와 keys_view 변수에 저장합니다.
keys_view 객체와 sorted_keys 리스트를 출력합니다.
- 그런 다음 새 키 - 값 쌍을 추가하여 딕셔너리를 수정합니다.
- 딕셔너리의 변경 사항을 반영하는 것을 보여주기 위해
keys_view 객체를 다시 출력합니다.
- 마지막으로
sorted_keys 리스트를 반복하고 키 - 값 쌍을 출력합니다. sorted_keys 리스트는 변경되지 않고 키 "d"의 추가를 반영하지 않음에 유의하세요.
이제 다음 명령을 사용하여 스크립트를 실행합니다.
python sort_keys.py
다음과 같은 출력을 볼 수 있습니다.
Keys view object: dict_keys(['b', 'a', 'c'])
Sorted keys: ['a', 'b', 'c']
Keys view object after modification: dict_keys(['b', 'a', 'c', 'd'])
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
다음 사항을 관찰합니다.
keys_view 객체는 딕셔너리 키의 동적 뷰입니다. 딕셔너리를 수정하면 keys_view 객체가 변경 사항을 반영합니다.
sorted_keys 리스트는 생성 당시의 키를 포함하는 정적 리스트입니다. 나중에 딕셔너리에 적용된 변경 사항을 반영하지 않습니다.
- 루프는
sorted_keys가 생성되었을 때 존재했던 키만 반복합니다.
이 예제는 keys()와 sorted()의 주요 차이점을 강조합니다. keys()는 동적 뷰를 제공하는 반면, sorted()는 정적 정렬된 리스트를 생성합니다. 딕셔너리의 변경 사항을 반영해야 하는지 또는 고정된 정렬된 키 집합으로 작업해야 하는지에 따라 적절한 메서드를 선택하십시오.