2012-05-20 2 views
0

J'ai un dictionnaire:Comment imprimer les valeurs du dictionnaire de gauche à droite?

a = {"w1": "wer", "w2": "qaz", "w3": "edc"} 

Lorsque je tente d'imprimer ses valeurs, elles sont imprimées de droite à gauche:

>>> for item in a.values(): 
    print item, 


edc qaz wer 

Je veux qu'ils soient imprimés de gauche à droite:

wer qaz edc 

Comment puis-je le faire?

+0

Cela semble être lié: http://stackoverflow.com/questions/364519/in-python-how-to-i-iterate-over-a-dictionary-in-sorted-order – dmh

Répondre

9

Vous ne pouvez pas. Les dictionnaires n'ont aucun ordre que vous pouvez utiliser, donc il n'y a pas de concept de «gauche à droite» en ce qui concerne les littéraux de dictionnaire. Décidez d'un tri, et respectez-le.

+0

Alors pourquoi préfère-t-il? écrire des valeurs de droite à gauche? – alwbtc

+0

@alwbtc c'est un problème d'implémentation dont il n'est pas sûr de dépendre (c'est-à-dire qu'il ne le fait pas toujours dans cet ordre) – Levon

+2

Il ne "préfère pas écrire les valeurs de droite à gauche". Il écrit les valeurs dans un ordre arbitraire qui dépend de la valeur exacte des clés et des détails d'implémentation, qui ** arrive juste **, dans ce cas particulier, à l'inverse de l'ordre que vous avez utilisé lorsque vous avez créé la dict. –

2

En supposant que vous voulez les dans l'ordre alphabétique des clés, vous pouvez faire quelque chose comme ceci:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"} # your dictionary 

keylist = a.keys() # list of keys, in this case ["w3", "w2", "w1"] 
keylist.sort()  # sort alphabetically in place, 
        # changing keylist to ["w1", "w2", w3"] 

for key in keylist: 
    print a[key]  # access dictionary in order of sorted keys 
0

comme @ IgnacioVazquez-Abrams mentionné, ce n'est pas une telle chose comme order dans les dictionnaires, mais vous pouvez obtenir un effet similaire en utilisant la commande ordonnée odict de http://pypi.python.org/pypi/odict

également consulter PEP372 pour plus de discussion et correctifs odict.

3

Vous pouvez utiliser collections.OrderedDict (python 2.7 ou plus récent - Il existe une recette ActiveState quelque part qui fournit cette fonctionnalité pour python 2.4 ou plus récent (je pense)) pour stocker vos éléments. Bien sûr, vous devrez insérer les éléments dans le dictionnaire dans le bon ordre (la syntaxe {} ne fonctionnera plus - et ne passera pas clé = valeur au constructeur, car comme d'autres l'ont mentionné, ceux-ci s'appuient sur des dictionnaires réguliers qui n'ont aucun concept de commande)

+0

+1 Chaque fois que quelqu'un commence à demander la sortie de dicts dans quelque chose d'autre qu'un ordre de clé arbitraire ou trié, une classe personnalisée «OrderedDict» ou similaire est ce qu'ils recherchent. –

0

Les dictionnaires utilisent des valeurs de hachage pour associer des valeurs. La seule façon de trier un dictionnaire ressemblerait à quelque chose comme:

dict = {} 
x = [x for x in dict] 
# sort here 
y = [] 
for z in x: y.append(dict[z]) 

Je n'ai pas fait un vrai travail en python dans un certain temps, donc je peux être un peu rouillé. Corrigez-moi si je me trompe.

Questions connexes