개요
딕셔너리에 저장된 리스트 값들 중에서 최댓값과 최솟값의 차이, 즉 범위(range)가 가장 넓은 키를 찾아 출력해야 하는 경우가 있습니다. 이럴 때는 외부 라이브러리 없이 간단한 반복문만으로 손쉽게 해결할 수 있습니다.
예제 코드
다음은 그 구현 방법을 보여주는 예제입니다 −
my_dict = {"pyt" : [26, 12, 34, 21], "fun" : [41, 27,43, 53, 18], "learning" : [21, 30, 29, 13]}
print("The dictionary is :")
print(my_dict)
max_result = 0
for sub, values in my_dict.items():
max_result = max(max_result, max(values) - min(values))
if max_result == max(values) - min(values):
result = sub
print("The result is :")
print(result)출력 결과
The dictionary is :
{'pyt': [26, 12, 34, 21], 'fun': [41, 27, 43, 53, 18], 'learning': [21, 30, 29, 13]}
The result is :
fun
코드 설명
딕셔너리를 정의한 뒤 콘솔에 출력합니다.
결과를 저장할 변수를 0으로 초기화합니다.
딕셔너리의 요소들을 하나씩 순회하면서, 각 리스트에서
max()값과min()값의 차이를 계산하고, 이전까지 구한 최댓값과 비교하여 더 큰 값을 저장합니다.계산된 최댓값이 해당 리스트의 max와 min의 차이와 일치한다면, 그 키를 결과로 지정합니다.
마지막으로 결과를 콘솔에 출력합니다.
더 간결한 대안
max() 함수의 key 인자를 활용하면 위 로직을 한 줄로 줄일 수 있습니다.
result = max(my_dict, key=lambda k: max(my_dict[k]) - min(my_dict[k]))
print(result) # fun
이 방식은 반복문과 조건문을 직접 작성하지 않아도 되므로 코드가 더 짧고 가독성이 좋아집니다. 다만 각 키마다 max와 min을 두 번씩 계산하므로, 데이터가 매우 클 경우에는 첫 번째 예제처럼 한 번의 순회로 처리하는 편이 효율적입니다.