Filtrer le dictionnaire et supprimer les valeurs les plus basses
devmrh
J'ai un dictionnaire comme ci-dessous. Existe-t-il un moyen de générer un dictionnaire avec les 5 valeurs les plus élevées?
S'il y a des égalités pour la 5e valeur la plus élevée, je dois inclure ces clés.
Dictionnaire d'entrée :
{
"1": 1,
"12": 1,
"13":2,
"3": 5,
"5":8,
"7":3,
"4":8,
"10":7
}
Résultat désiré:
{
"3": 5,
"5":8,
"7":3,
"4":8,
"10":7
}
jpp
Comptabilisation des cravates:
val = sorted(d.values(), reverse=True)[4]
res = {k: v for k, v in d.items() if v >= val}
print(res)
{'3': 5, '5': 8, '7': 3, '4': 8, '10': 7}
Explication
- Calculez la 5e valeur la plus élevée en utilisant
sorted
avecreverse=True
. N'oubliez pas que l'indexation commence à0
so index avec[4]
. - Utilisez une compréhension de dictionnaire pour sélectionner tous les éléments de votre dictionnaire où la valeur est supérieure à la valeur calculée.
Optimisation
Une méthode plus efficace, comme le souligne @Chris_Rands, consiste à utiliser heapq
pour calculer la 5e valeur la plus élevée:
import heapq
val = heapq.nlargest(5, d.values())[-1]
res = {k: v for k, v in d.items() if v >= val}