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 sortedavec reverse=True. N'oubliez pas que l'indexation commence à 0so 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 heapqpour 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}

Articles connexes


SQL Server : obtenir et additionner les valeurs les plus basses

bvh Je ne peux pas comprendre l'instruction SQL pour obtenir le plus bas on_handpar magasin et SKU, puis le résume. Voici mon exemple de tableau. Remarque skuet storeest un composite key. Le résultat que je recherche est 16:(10 + 5 + 1) J'utilise SQL Server 20

Somme des cinq valeurs les plus basses

Sablonneux Comment puis-je trouver la somme des cinq points les plus bas dans la colonne Point et grouper par ID Tableau Les résultats souhaités devraient être; Résultats Aucune idée par où commencer Merci Je suis Batman select a.ID, SUM(a.points) from(select

supprimer les valeurs vides dans le dictionnaire

CONTRE Mon code est le suivant: new_dict = {k: v for k,v in d.items() if v != None} Je dois supprimer les valeurs vides qui apparaissent comme ''dans mon dictionnaire. Je reçois actuellement la sortie: '000B4662348C35B4': ['000B4662348C35B4', '', '', '', '',

Filtrer les valeurs du dictionnaire

user3378649 Je veux filtrer les valeurs du dictionnaire. d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7} Quelle est la manière pythonique de faire cela. d={} for k,v in d1.items(): if v>0: d[k]=v Je ne pouvais pas utiliser de filtre pour obtenir les mêmes ré