HOWTO · Python

Python 사전에서 첫 번째 키를 가져오는 방법

next(), 리스트 변환, for 루프, 빈 사전에 대한 안전한 기본값을 사용해 Python 사전 이터레이터가 생성하는 첫 번째 키를 가져오는 방법을 알아봅니다.

이 페이지의 내용

Python 사전이 생성하는 첫 번째 키를 가져오려면 next(iter(my_dict))를 호출하세요. 이렇게 하면 사전 이터레이터에서 키를 직접 읽을 수 있습니다. 이 예제에서 사전에는 이름과 도시가 들어 있으며, 프로그램은 가장 먼저 생성된 키를 출력합니다.

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

사전에서 ‘첫 번째’의 의미

사전은 키에 대한 숫자 인덱싱을 제공하지 않습니다. 여기서 ‘첫 번째’란 Python이 사전을 순회할 때 생성되는 첫 번째 키를 의미합니다. 순서가 있는 사전에서는 순회가 삽입 순서를 따르므로, 첫 번째 키는 가장 먼저 삽입된 키입니다. 매핑이 다른 순회 순서를 사용하는 경우, ‘첫 번째’는 해당 매핑의 순회 동작을 따릅니다. 이 정의는 순회 결과를 설명하는 것이며, 모든 매핑이 같은 방식으로 키를 정렬한다고 가정하지 않습니다.

사전 순회는 기본적으로 키를 생성합니다. 따라서 사전을 iter()나 for 루프에 직접 전달할 수 있습니다. 먼저 keys()를 호출할 필요가 없습니다. my_dict.keys() 메서드는 그 뷰를 별도로 검사하거나 재사용해야 할 때 키의 동적 뷰를 반환합니다.

next()로 첫 번째 키 가져오기

iter()를 사용해 사전에 대한 이터레이터를 만든 다음, next()를 사용해 그다음 항목을 가져옵니다. 사전 이터레이터는 키를 생성하므로, 이 방식은 모든 키의 별도 리스트를 만들지 않고 키 하나를 읽습니다. 비어 있지 않은 사전의 경우, 키가 하나만 필요할 때 간결한 선택입니다.

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

first_key의 값은 순회가 생성한 첫 번째 키입니다. next()는 선택적 기본값도 받는데, 이는 사전에 키가 없을 수 있을 때 유용합니다. 마지막 섹션에서 그 형태를 보여 줍니다.

list()로 첫 번째 키 가져오기

키가 리스트로도 필요하다면, 사전을 리스트로 변환하고 인덱스 0을 선택하세요. list()에 전달된 사전은 그 키들을 생성하므로, 먼저 keys()를 호출할 필요가 없습니다.

my_dict = {"name": "Ada", "city": "London"}
first_key = list(my_dict)[0]
print(first_key)

이 변환은 키 하나를 선택하기 전에 모든 키를 구체화합니다. 키가 하나만 필요할 때는 이터레이터 방식을 사용하세요. 리스트 변환은 결과 리스트를 인덱싱, 슬라이싱하거나 다른 리스트 연산에 사용할 때 유용합니다. 인덱스 0은 리스트에 키가 포함되어 있어야 하므로, 이 형태는 사전이 비어 있을 수 있는 경우에는 먼저 확인하지 않는 한 적합하지 않습니다.

for 루프로 첫 번째 키 가져오기

for 루프는 사전 키를 직접 순회합니다. 첫 번째 키를 할당한 다음, break를 사용해 그 순회 뒤에 중단하세요.

my_dict = {"name": "Ada", "city": "London"}
for key in my_dict:
    first_key = key
    break
print(first_key)

이 방식은 이미 루프를 사용하는 코드나, 중단하기 전에 키로 어떤 작업을 수행해야 하는 코드에 적합합니다. 모든 키를 리스트로 변환하는 것을 피할 수 있습니다. 값을 사용하지 않을 때 루프에는 items()가 필요하지 않습니다. 사전에 키가 없으면 루프 본문은 실행되지 않으므로, 이후에 first_key를 사용하는 코드는 그 가능성을 고려해야 합니다.

빈 사전 처리하기

사전에 키가 없을 때 next(iter(my_dict))를 호출하면 StopIteration이 발생합니다. 대신 대체 값을 반환하도록 next()에 두 번째 인자를 전달하세요.

my_dict = {}
first_key = next(iter(my_dict), None)
print(first_key)

여기서 None이 대체 값입니다. 유효한 사전 키와 혼동될 수 없는 기본값을 선택하세요. 데이터에서 None이 키가 될 수 있다면, 고유한 센티넬 객체를 만들어 기본값으로 사용하세요.

my_dict = {"name": "Ada", "city": "London"}
sentinel = object()
first_key = next(iter(my_dict), sentinel)
if first_key is sentinel:
    print("No keys")
else:
    print(first_key)

list(my_dict)[0]을 사용하는 리스트 방식에는 기본 인자가 없으며, 키가 없을 때 IndexError가 발생합니다. 인라인 대체 값으로 빈 입력 동작을 다루기 쉬워지는 경우에는 next(iter(my_dict), default)를 사용하세요.