la recherche de premiers k plus grandes touches dans un dictionnaire python
Permet de dire que j'ai un dictionnaire:
{key1:value1........... keyn:valuen}
Donc disons que je veux écrire une fonction
def return_top_k(dictionary, k):
return list_of_keys_sorted
Quel est le moyen le plus efficace (en termes de big O) pour obtenir les clés qui ont le haut les valeurs de k (maintien de l'ordre que j'ai.e la valeur la plus élevée est présente dans le début.. et ainsi de suite.)
- Lorsque l'on parle de dictionnaires à l'aide de
k
pour un nombre est source de confusion car il se trouve souvent pour la "clef". Utilisationn
à la place.
Vous devez vous connecter pour publier un commentaire.
O(n log k)
:Vous pouvez utiliser
key
mot-clé paramètre pour spécifier ce qui doit être utilisé comme une clé de tri par exemple:heapq.nlargest(k, dictionary, key=dictionary.__getitem__)
: les clés de dictionnaire commandés par leurs valeurs.Devrait être au pire
O(NlogN)
(bien queheapq
proposées par d'autres est probablement mieux) ...Il pourrait également préférable d'utiliser un
Counter
au lieu de régulièrement un dictionnaire. Dans ce cas, lemost_common
méthode permettra de le faire (à peu près) ce que vous voulez (dictionary.most_common(10)
), mais seulement si il est logique d'utiliser unCounter
dans votre API.collections.Counter
serait la bonne structure de données. Alors la solution serait[k for k, v in counts.most_common(10)]
.Pour le top-3, étape par étape:
Ou à l'aide de
heapq
moduleDans le code
Si vous aussi vous avez besoin de valeurs:
Ou si vous souhaitez utiliser
OrderedDict
: