[Python] dictionary max value에 대한 key 찾기

반응형

Dictionary

Python에서 딕셔너리(dictionary)는 key와 value가 쌍을 이루는 사전 형태의 자료형입니다.  key값은 중복이 되지 않으며, key를 중복으로 추가하는 경우 마지막으로 추가한 key : value 쌍이 딕셔너리에 남게 됩니다. 또한, key에는 immutable(변경불가) 자료형만 올 수 있습니다.

*Immutable 자료형: 변경이 불가능한 객체로 이루어진 자료형을 의미합니다. 예를 들어, int, float, string과 튜플(tuple) 등이 있습니다.

 

딕셔너리 생성

di = {'a': 0, 'b': 1, 'c': 2, 'd': 3} # 직접 생성
di = dict(zip('abcd',range(4))) # zip 함수를 사용해 dict 생성: zip(key list, value list)

딕셔너리 생성할땐 중괄호 안에 key와 value를 콜론( : )으로 쌍을 만들어 직접 정의하는 방법이 있습니다. 만약 길이가 같은 이터레이터(iterator) 형태의 key 배열과 value 배열이 있다면 zip함수를 이용해 쉽게 dictionary를 생성할 수 있습니다. 

*이터레이터(iterator) : 반복이 가능한 객체. 쉽게 말해, 반복문을 활용해 데이터 순회가 가능한 자료형을 의미합니다. 예를 들어 List, Dictionary, Set, Tuple, String 등이 있습니다.

* di 출력

di 출력

최대 value에 대한 key 찾기

max(di,key=di.get) # di.get 이용
[k for k,v in di.items() if max(di.values()) == v] # 리스트 컴프리헨션 이용

max(di)를 하면 di의 key값 중 최댓값이 출력됩니다. key=di.get을 사용했는데, di.get은 일반적으로 di.get(key)와 같이 쓰여 해당 key에 대한 value를 출력해주는 함수입니다. max의 key로 di.get함수를 사용했는데 key를 입력으로 value를 출력하기 때문에 value의 최댓값을 기준으로 하여 di의 key를 출력해주게 됩니다.

 다음으로 사용한 것은 리스트 컴프리핸션입니다. max(di.values())를 하게 되면 딕셔너리의 value 중에 최댓값을 출력해주며 di.items()에서 k에 key값이 v에 value값이 반복되며 v가 value중 최대값을 때만 k를 출력하게 하는 것입니다.

* 출력

max 이용 방법과 리스트 컴프리핸션 이용 방법

 

현재 di에는 value의 최댓값이 3 한개입니다. 만약 딕셔너리 value의 최대값이 여러 개라면 어떻게 될까요?

di['e']=3
max(di,key=di.get)
[k for k,v in di.items() if max(di.values()) == v]

di에 {'e': 3}을 추가해보겠습니다. 그 후에 max를 이용한 방법과 리스트컴프리핸션을 이용한 방법의 출력을 보겠습니다.

* 출력

value의 최대값이 여러개일 경우

max함수를 이용했을 때는 value의 최댓값 중 맨 앞에 있는 key인 'd' 하나만 출력해 줍니다. 반면, 리스트 컴프리핸션을 이용했을 때는 value의 최댓값에 대한 모든 key를 출력해 줍니다.

 value의 최댓값이 1개일 때는 max함수를 이용하면 간단하고, value의 최대값이 여러 개인 경우에는 리스트 컴프리핸션 방법이 간단한 편입니다.

반응형

댓글

Designed by JB FACTORY