2013-09-22 3 views
2

J'ai créé un dictionnaire python qui a des touches sous cette forme:Tri du dictionnaire Python basé sur la clé?

11, 10, 00, 01, 20, 21, 31, 30 

Les touches sont chaîne

Je voudrais maintenir mon dictionnaire dans ces ordre de tri:

00, 10, 20, 30, 01, 11, 21, 31 

Cette est basé sur la deuxième valeur de la clé.

J'ai essayé sorted(dict.items(), key = lambda s: s[1]) et a obtenu les clés comme:

20, 30, 21, 31, 01, 11, 10, 00 

Quelqu'un peut me guider?

+0

Avez-vous envisagé d'utiliser un [OrderedDict] (http://docs.python.org/2/library/collections.html#collections.OrderedDict)? – kojiro

+0

Cette question est certainement un doublon. :) Je ne peux même pas compter combien de fois je l'ai vu. – Shashank

+0

Salut. 'items' renvoie la liste des tuples où le premier élément est la clé et le second est la valeur. Donc, si vous souhaitez les trier par clés Vous devez utiliser triées (dict.items(), key = lambda s: s [0]) mais dans ce cas, vous avez des clés triée croissant Si vous souhaitez pour trier comme dans votre exemple 11, 10, 00, 01, 20, 21, 31, 30 > Je voudrais maintenir mon dictionnaire dans ces ordre de tri: 00, 10, 20, 30, 01, 11, 21, 31 Vous devez inverser la clé en fonction triée triés (dict.items(), key = lambda s: '' .join (interverti (s [0]))) – oleg

Répondre

1

Vous avait presque, mais la clé est le premier élément du tuple:

sorted(dict.items(), key=lambda s: s[0]) 
+2

Je lis que la deuxième valeur de la clé "est probablement:' s [0] [1] ' –

+0

@JonClements: Ah, bon point. Merci. – Ryan

+0

Aussi ne serait pas blessant d'utiliser 'key = lambda (clé, val): clé [1]' juste pour le rendre explicite –

1

Un dictionnaire utilise quelque chose appelé hachage et il ne peut pas être réglé en tant que tel. Qu'est-ce que vous pouvez faire est d'utiliser dict.keys().sort(key = lambda s: s[1]) et itérer ou continuer à partir de là.

+1

Cela ne fera pas ce que vous attendez. La méthode '.sort' d'une liste fonctionne sur la liste en place, et cette liste est éphémère. La prochaine fois que vous aurez dict.keys(), il ne sera pas trié. Ce ne sera pas la même liste. – kojiro

+0

oui vous avez raison! 'x = dict.keys()' et ensuite 'x.sort (...)' Merci! – adarsh

Questions connexes