web-dev-qa-db-fra.com

L'objet dict_items n'a pas d'attribut 'sort'

Tout d'abord, je suis nouveau sur Python. J'utilise PTVS http://pytools.codeplex.com/ . Ensuite, j'ai installé reportlab. Ensuite, je lance un exemple de démonstration à https://github.com/nakagami/reportlab/blob/master/demos/colors/colortest.py#L68 Mais à la ligne,

all_colors = reportlab.lib.colors.getAllNamedColors().items()
all_colors.sort() # alpha order by name

Je reçois une erreur, dict_items object has no attribute sort

21
user960567

Je n'ai pas testé mais une théorie: vous utilisez python3!

De https://docs.python.org/3/whatsnew/3.0.html

les méthodes dict dict.keys (), dict.items () et dict.values ​​() renvoient des "vues" au lieu de listes. Par exemple, cela ne fonctionne plus: k = d.keys (); k.sort (). Utilisez plutôt k = sorted (d) (cela fonctionne aussi en Python 2.5 aussi et est tout aussi efficace).

si je comprends bien, une "vue" est un itérateur, et un itérateur n'a pas la fonction de tri. Changez-le en

sorted(all_colors)

selon la documentation

43
Johan

La solution totale basée sur la réponse de Johan est donc:

all_colors = sorted(reportlab.lib.colors.getAllNamedColors().items())
5
Klamer Schutte