2010-03-15 5 views
1

Je PORTAGE un code de Python 2 à 3. Ceci est un code valide dans la syntaxe Python 2:Python 2 dict_items.sort() en Python 3

def print_sorted_dictionary(dictionary): 
    items=dictionary.items() 
    items.sort() 

En Python 3, les dict_items ont pas de méthode 'sort' - comment puis-je faire une solution pour cela dans Python 3?

+0

Notez que le code affiché comme une erreur d'indentation et la fonction ne fait pas réellement ce qu'il dit (il n'imprime rien). –

+0

Il y avait une question ici (je pense au cours des deux ou trois dernières semaines) sur les dictionnaires ordonnés en Python. Je ne peux pas le trouver mais en cherchant, j'ai trouvé ceci: http://www.python.org/dev/peps/pep-0372/ – MatrixFrog

+0

La plupart des différentes implémentations dict dictées sont basées sur l'ordre d'insertion original, et non trié . (Il ne serait pas si difficile de créer une classe qui implémente un arbre ou qui garde une liste triée à côté d'un dict.) –

Répondre

7

Utilisez items = sorted(dictionary.items()), il fonctionne très bien dans les deux Python 2 et Python 3.

+1

Faire un code qui fonctionne à la fois dans Python 2 et 3 me semble un plus étrange. plus de sens pour moi de faire du bon code dans la version pour laquelle vous écrivez, ce qui signifie que '2to3' peut le traduire si vous écrivez pour Python 2.x. –

+1

@Mike, dans le cas général, bien sûr, mais dans ce cas 'trié' est très bien (et ne le corrigera pas,' 2to3' - bien sûr) - donc votre suggestion et la mienne sont identiques et je ne vois pas le point de votre critique dans ce commentaire –

+0

Dans ce cas * est * bon code dans les deux versions –

2

dict.items retourne une vue au lieu d'une liste en Python 3 (un peu de façon similaire à la méthode iteritems en Python 2.x). Pour obtenir une liste triée des articles utilisent

sorted_items = sorted(d.items()) 

Le sorted prend un builtin itérables et retourne une nouvelle liste de ses articles, triées.