2017-10-21 116 views
0

Ces deux fonctions créent-elles x? Je ne comprends pas pourquoi itemgetter semble retourner la variable correcte en utilisant 0 comme une entrée dans ce cas.Dictionnaire de tri Python par clé renvoyant la liste des valeurs itemgetter

Le tri par article est-il correctement trié par clé dictionnaire? Ils ont tous deux la même impression

from operator import itemgetter 

lvls = {1: ["t1","t2"], 2: ["t3","t4"], 3: ["tdfgdf99","x99"]} 

x = sorted((v for k,v in lvls.items()),key=itemgetter(0),reverse=True) 

print (x) 

x = sorted((v for k,v in lvls.items()),key=lambda k: k,reverse=True) 

print (x) 
+1

savez-vous comment 'itemgetter' fonctionne? Dans votre scénario, vous spécifiez '0' comme argument pour' itemgetter'. Il va retourner les clés triées par 'f (lvls.items() [0])' où dans ce cas 'f' est' v pour k, v' donc c'est un tri basé sur 'lvls.values ​​() [0 ] 'à l'envers. espérons que cela aide –

+1

@new_to_coding votre approche donne fondamentalement les mêmes résultats, par hasard, si vous essayez de les trier par des clés ie 1, 2, 3. Dans un scénario très différent de valeurs dans votre dictionnaire, ces deux appels triés pourraient renvoyer séquences entièrement différentes. –

+1

Non. Ces deux sortes ignorent totalement les clés de 'lvls' et ne regardent que les valeurs associées. Le premier est trié par le 1er élément dans chaque liste de valeur, le second utilise tous les éléments de chaque liste de valeurs. BTW, 'lambda k: k' est équivalent à la fonction clé par défaut, seulement plus lent. –

Répondre

1

itemgetter(0) obtient l'élément à l'index 0th.

Dans votre premier cas, vous allez trier 0th index de v dans l'ordre inverse. Donc, ce que vous êtes en train de faire est de trier les index 0th de ["t1", "t2"], ["t3", "t4"] et ["tdfgdf99", "x99"] dans l'ordre inverse.

Dans votre deuxième cas, vous triez v qui est la valeur de la liste, soit [["t1","t2"], ["t3, "t4"], ["tdfgdf99","x99"]] dans l'ordre inverse. le but de lambda k: k est que vous choisissiez simplement un élément de cette liste et retourniez.