im en utilisant python 3,6 et j'ai besoin de trier par rapport à un dictionnaire multidimensionnel.
C'est la dict: p> Les résultats attendus sont que la sortie sera triée au revoir J'ai essayé d'utiliser code> fonctionner code> mais Tout le temps que je reçois cette erreur: p> erreur: p> num_subdir code> Valeur et affiche la même dicte mais avec cet ordre.
Je reçois la dicte par une fonction et j'ai redirigé la sortie de cette fonction sur Var 'DirS', donc DirS est le dictionnaire. P> {'1234': {'/root/git/dir1/1234': 10},
'cece': {'/root/git/dir1/cece': 0},
'dir11': {'/root/git/dir1/dir11': 7},
'dir13': {'/root/git/dir1/dir13': 7},
'dir14': {'/root/git/dir1/dir14': 11},
'dir15': {'/root/git/dir1/dir15': 12},
'dir16': {'/root/git/dir1/dir16': 0},
'dir17': {'/root/git/dir1/dir17': 0},
'dir18': {'/root/git/dir1/dir18': 0},
'jaja': {'/root/git/dir1/jaja': 0},
'ola1': {'/root/git/dir1/ola1': 0}}
3 Réponses :
J'espère que cela aide ...
essayez de commanderddict qui est très utile, p> maintenant, vous obtiendrez des articles triés. P> P>
Merci de réponse, mais j'ai besoin de commander tout le dictionnaire, pas seulement '1234' .. Comment puis-je commander tout?
Si simplifiez votre dicle plus à: alors vous pouvez l'imprimer trié par numéro: p> sortie: p > {'/root/git/dir1/ola1': 0,
'/root/git/dir1/cece': 0,
'/root/git/dir1/dir18': 0,
'/root/git/dir1/dir17': 0,
'/root/git/dir1/jaja': 0,
'/root/git/dir1/dir16': 0,
'/root/git/dir1/dir11': 7,
'/root/git/dir1/dir13': 7,
'/root/git/dir1/1234': 10,
'/root/git/dir1/dir14': 11,
'/root/git/dir1/dir15': 12}
Hé, merci beaucoup, c'est mon objectif, mais je ne peux pas simplifier mon dictionnaire avec ces résultats ..
Je pense que le problème est avec la structure de données que vous utilisez!
Dictionnaires en Python par défaut n'a aucune fonctionnalité appelée Trier. Donc, vous devez penser à une alternative. P>
Un possible pour résoudre ce problème, consiste à utiliser la liste de tuple. P>
Pourquoi la liste de tuple? Strong> P> Une liste de tuple peut être facilement converti en dict chaque fois que nécessaire. Par exemple, P> data.sort(key=lambda item: item[0], reverse=False) # reverse=True for descending order
ORDEN = trié (["DIRS '], touche = lambda x: x [" num_subdir']) code> Vous traiez la chaîne 'DIRS' Essayez de l'utiliser sur les données que vous avez.Le 1er argument sur
trié code> doit être un tableau de sous-répertoires, pas seulement['DIRS'] code>Il suffit de noter qu'un python
dict code> n'a aucune commande. Un dict trié (danscollections code>) a.Qu'essayez-vous d'atteindre exactement?
Je viens de modifier mon post. DIRS est le nom de la dicte. Je reçois ma dicte par un funcion et j'ai été attribué à l'oTuput à un var (je ne sais pas maintenant si cela est correct): DIRS = Pathtodict (chemin)
@Dschoni: C'est faux; AS de Python 3.7, dict de garantie d'insertion, en tant que caractéristique de langue
Cette question est problématique, elle est transformée à l'originale de demander des dicts multidimensionnels, de sorte que la partie devrait être supprimée, ou du moins réduite à une note de bas de page et la question actuelle postée au début. Quoi qu'il en soit, le tri (plat) dict est un duplicata et doit être fermé comme dupe.
@SMCI OP utilise 3.6, mon commentaire est donc pertinent.
@Dschoni: Désolé, non. Python 3.6 Dict Dict Garantie Ordre d'insertion, de la réimplémentation CPPHON A >. Si vous essayez de dire "Les dictes python n'imposent pas automatiquement (alphabétique ou autre) commandant sur leurs clés", alors c'est correct. Mais la réclamation de la couverture "Un dict de Python n'a pas d'ordre que ce soit" est incorrecte depuis 2016. Il a l'quelconque ordre que vous le créez.
@SMCI peut-être que c'est de Nitpicking, mais de cette page exacte: «L'aspect préservatif de la commande de cette nouvelle mise en œuvre est considéré comme un détail de la mise en œuvre et ne doit pas être invoqué [...]», mais vous m'avez dit quelque chose que je ne connaissais pas et C'est génial (j'ai toujours voulu avoir une préservation d'une commande d'insertion ... je devrais lire les notes de publication;))). Donc merci.
@Dschoni Oui, en 3.6 C'est un détail de mise en œuvre, mais depuis la garantie de 3,7 ans, il est maintenant garanti, le fait que ce soit juste un détail de mise en œuvre en 3.6 est en grande partie dénué de pertinence. À moins que quelqu'un compile sa propre version de 3.6 qui ne met pas en œuvre la commande. ;)
@Dschoni: Ce n'était que vrai pour 3.6, comme je vous l'ai dit la semaine dernière 3.7 promu Dict commande à une caractéristique garantie par la langue b> . Donc, ce que vous avez écrit était hors de jour. Beaucoup d'utilisateurs ne sont pas au courant des changements de 3.7, ne diffusent pas d'informations obsolètes avec l'OMPLO-OBSOLETE "Un dict python n'a pas de commande que ce soit" i>. Aussi jusqu'à 3.6 va, comme je vous l'avais dit La mise en œuvre de CPPHON de 3,6 commandé de la DICION Mise en œuvre B>; Tout simplement pas PYPI (ou d'autres implémentations).
Je suis déjà ninja-édité mon dernier commentaire. Je l'ai maintenant et je suis heureux d'avoir appris quelque chose de nouveau;)