2010-04-13 3 views
2

salut im faire une boucle pour que je puisse obtenir dict des données, mais depuis son un dict il est le tri alphabétique et non pas comme je le pousse Trought la boucle ...python: tri

est-il possible de tourner en quelque sorte hors tri alphabétique?

voici comment dois-je faire que

data = {} 
for item in container: 
    data[item] = {} 
    ... 
    for key, val in item_container.iteritems(): 
    ... 
    data[item][key] = val 

whitch me donner quelque chose comme ça

data = { 
    A : { K1 : V1, K2 : V2, K3 : V3 }, 
    B : { K1 : V1, K2 : V2, K3 : V3 }, 
    C : { K1 : V1, K2 : V2, K3 : V3 } 
} 

et je veux que ce soit que j'allais throught la boucle, par exemple

data = { 
    B : {K2 : V2, K3 : V3, K1 : V1}, 
    A : {K1 : V1, K2 : V2, K3 : V3}, 
    C : {K3 : V3, K1 : V1, K2 : V2} 
} 
+7

Cela semble seulement alphabétique par hasard. Si vous ajoutez d'autres chaînes, ou d'autres éléments, vous verrez que ce n'est pas alphabétique du tout. Les dicts n'ont pas d'ordre fiable. –

Répondre

5

Si vous avez vraiment besoin d'utiliser un dictionnaire et non une liste, jetez un oeil au nouveau OrderedDict (Python 3.1, bientôt disponible dans Python 2.7). Cela permettra de préserver l'ordre dans lequel ses éléments ont été ajoutés.

from collections import OrderedDict 
data = OrderedDict() 
for item in container: 
    data[item] = OrderedDict() 
    ... 
    for key, val in item_container.iteritems(): 
    ... 
    data[item][key] = val 
+1

Je vous suggère d'ajouter un lien vers le package qui fournit OrderedDict pour Python 2.4 à 2.6: http : //pypi.python.org/pypi/ordereddict –

+0

Oh, super - je ne savais pas à ce sujet. Eh bien, vous avez déjà ajouté le lien, pas grand chose à faire pour moi :) –

3

Vous ne devriez pas vous fier à l'ordre de tri des données dans un dict; comme il s'agit juste d'une collection de paires clé/valeur, l'ordre n'est pas garanti par l'implémentation sous-jacente et pourrait changer dans une future version.

+1

Pour plus d'informations, voir: http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value –

0

Vous pouvez utiliser une liste de listes au lieu d'une dictée de dicts. Chaque élément serait un tuple de (clé, valeur). Bien sûr, cela signifie que vous ne serez pas en mesure de récupérer des éléments par des clés, mais il conservera l'ordre. Je ne suis pas sûr que ce soit une bonne idée, parce que je ne sais pas vraiment ce que vous essayez de faire, mais c'est une option.