Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 사전으로 계산을 수행하는 방법은 무엇입니까?

<시간/>

문제

데이터 사전에 대해 다양한 계산(예:최소값, 최대값, 정렬 등)을 수행하려고 합니다.

해결책.

테니스 선수와 그랜드슬램 타이틀이 포함된 사전을 만들 것입니다.

PlayerTitles = {
   'Federer': 20,
   'Nadal': 20,
   'Djokovic': 17,
   'Murray': 3,
   'Theim' : 1,
   'Zverev': 0
}

1. 우리는 선수 이름과 각 선수가 획득한 그랜드슬램 타이틀이 있는 사전이 있습니다. 이제 타이틀 수가 가장 적은 플레이어를 찾아보겠습니다.

#type(PlayerTitles)
print(f"Output \n*** The minimum value in the dictionary is {min(PlayerTitles)} ")

출력

*** The minimum value in the dictionary is Djokovic

2. 이것은 우리가 실제로 사전 값을 포함하는 계산을 수행하려고 하기 때문에 아마도 우리가 원하는 것이 아닐 것입니다. 따라서 사전의 values() 메서드를 사용하여 이 문제를 해결해 보겠습니다.

print(f"Output \n*** The minimum value in the dictionary is {min(PlayerTitles.values())} ")

출력

*** The minimum value in the dictionary is 0

3. 불행히도 이것은 종종 당신이 원하는 것이 아닙니다. 예를 들어, 해당 키에 대한 정보(예:타이틀 수가 가장 적은 플레이어 이름)를 알고 싶을 수 있습니다.

4. min(), max()에 key 함수를 제공하면 min, max 값에 해당하는 key를 얻을 수 있다.

print(f"Output \n***{min(PlayerTitles, key=lambda k: PlayerTitles[k])} ")

출력

***Zverev

5. 그러나 최소값을 얻으려면 추가 조회를 수행해야 합니다.

min_titles = PlayerTitles[min(PlayerTitles, key=lambda k: PlayerTitles[k])]
print(f"Output \n***{min_titles} ")

출력

***0

6. zip()과 관련된 솔루션은 사전을 (값, 키) 쌍의 시퀀스로 "반전"하여 문제를 해결합니다. 이러한 튜플에 대해 비교를 수행할 때 값 요소가 먼저 비교되고 그 다음에 키가 비교됩니다.

이것은 우리가 원하는 동작을 정확히 제공하고 단일 명령문을 사용하여 사전 내용에 대해 축소 및 정렬을 쉽게 수행할 수 있도록 합니다.

min_titles = min(zip(PlayerTitles.values(), PlayerTitles.keys()))
max_titles = max(zip(PlayerTitles.values(), PlayerTitles.keys()))

print(f"Output \n***{min_titles , max_titles} ")

출력

***((0, 'Zverev'), (20, 'Nadal'))

7. 마찬가지로 데이터의 순위를 지정하려면 zip()을 sorted()와 함께 사용합니다.

titles_sorted = sorted(zip(PlayerTitles.values(), PlayerTitles.keys()))
print(f"Output \n***{titles_sorted} ")

출력

***[(0, 'Zverev'), (1, 'Theim'), (3, 'Murray'), (17, 'Djokovic'), (20, 'Federer'), (20, 'Nadal')]

8.이 계산을 수행할 때 zip()이 한 번만 사용할 수 있는 반복자를 생성한다는 점에 유의하십시오.

titles_and_players = zip(PlayerTitles.values(), PlayerTitles.keys())
print(f"Output \n***{min(titles_and_players)} ")

출력

***(0, 'Zverev')

9. 다시 호출하려고 하면 빈 시퀀스로 예외가 발생합니다.

10. (값, 키) 쌍을 포함하는 계산에서 키가 여러 항목이 동일한 값을 갖는 경우 결과를 결정하는 데 사용된다는 점에 유의해야 합니다.

예를 들어 min() 및 max()와 같은 계산에서 중복 값이 ​​발생하면 가장 작거나 큰 키가 있는 항목이 반환됩니다. 이것이 우리가 최대 타이틀을 가진 플레이어를 선택할 때 Nadal이라는 하나의 값으로 끝나는 이유입니다(7단계 출력 참조).