파이썬에서 딕셔녀리의 첫 번째 원소를 어떻게 가져올까요? iter와 next를 적절히 잘 이용해서 가져오는 방법이 있습니다.

 


 먼저 이해해야 할 것은 iter입니다. object로부터 iterator를 얻어오는데요. 이터레이터. 무언가를 순회하기 위한 도구 정도로 이해하면 적당합니다. 다음 원소를 가리키게 하는 메서드가 있는데요. 그것이 바로 아래에서 설명드릴 next입니다.

 

 

 설명을 읽어 보면, next item을 이터레이터로부터 얻어온다고 되어 있습니다. 만약에, exhausted가 되면, Stopiteration을 리턴하는데요. default 값이 있다면 default 값을 리턴합니다. 여기까지 내용을 종합해서 정리해 봅시다. 일단, 저는 python 3.9를 쓰고 있으니, 기본적으로 Ordered가 되어 있을 겁니다. 그리고 dictionary는 기본적으로 순회 가능한 구조입니다. 그래서 키, 값 쌍이 (15, 1), (8, 2)인 쌍을 순서대로 저장했다면, 아래와 같은 그림이 그려질 겁니다.

 

 

 it = iter(dic)을 호출했을 때, 이터레이터 it은 dic을 하나도 순회하지 않은 상태입니다. 이제, next(it)을 호출해 봅시다. next는 다음 아이템을 리턴하게 됩니다. 하나도 소모하지 않았기 때문에, 다음 원소는 키 값인 15가 됩니다.

 

 이 상태에서 또 다시 next(it)을 호출하면 어떻게 될까요? 15는 이미 소모했습니다. 그 다음 원소는 8이기 때문에, 8이 리턴됩니다.

 

 또 다시 next(it)을 호출하면 어떻게 될까요? 15, 8 두 개를 소모했고, 남은 원소는 없습니다. 따라서, default 값을 넘겨주지 않았다면, StopIterationError가 떨어지게 될 겁니다.

 


 이 프로그램의 결과는 어떻게 나올까요? 먼저, 딕셔너리 dic의 iterator를 얻어옵니다. 이 이터레이터는 처음에 아무 것도 소모하지 않았으므로, next(it)을 호출하면 15가 먼저 나옵니다. 또 다시 next(it)을 호출하면 8이 나오겠죠?

 

 

 실행 결과는 위와 같습니다. 그래서 dictionary의 first key를 얻으려면 어떻게 하면 될까요?

 

 

 5번째 줄과 같이 next(iter(dic)) 이렇게 작성하시면 됩니다. 그러면, dic의 이터레이터를 가져오고, 이터레이터가 가리키는 무언가의 1번째 원소를 가져오게 됩니다.

 

 

 첨언. 2개밖에 원소가 없는데 next를 3번 호출하면 어떻게 될까요?

 

 

 이 경우, StopIteration 이라는 에러를 떨구게 됩니다. default 값을 설정하면 어떨까요?

 

 

 이 경우는 어떨까요? 2번째 인자에 -1을 넣었기 때문에, default 값이 -1로 설정됩니다. 그렇기 때문에 dictionary에 있는 원소 순회를 모두 다 하고 나면 에러를 떨어트리는 것이 아니라 -1을 떨어트립니다. 결과를 보겠습니다.

 

 

 15, 8이 떨어졌습니다. 그 다음에 원소가 없으므로 -1을 돌려주게 됩니다. 절대로 나올 수 없는 default 값을 두고, next를 호출했을 때 나오는 값이 default 값인지를 체크하시면 됩니다. 고로, 값 자체가 없는 경우에 Error를 떨어트리지 않고, default 값을 가져와야 한다면 아래와 같이 입력해 주시면 됩니다.

 

 중요한 것은 next의 2번째 인자로 None을 넣어서, 더 이상 탐색할 수 없는 경우에 None이라는 특수한 상태를 떨궜다는 점입니다.