2008-09-10 10 views
11

Diccionarios a diferencia de las listas no están ordenadas (y no tienen el atributo 'ordenar'). Por lo tanto, no puede confiar en obtener los artículos en el mismo orden cuando los agregó por primera vez.En Python, ¿cómo puede recuperar fácilmente elementos ordenados de un diccionario?

¿Cuál es la forma más fácil de recorrer un diccionario que contiene cadenas como el valor de la clave y recuperarlas en orden ascendente por clave?

Por ejemplo, usted ha tenido este:

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 

Quiero imprimir los valores asociados en la siguiente secuencia ordenados por clave:

this is a 
this is b 
this is c 

Respuesta

1

Este fragmento lo hará. Si vas a hacerlo con frecuencia, es posible que desees hacer un método de 'ordenar' o algo así para que sea más fácil para los ojos.

keys = list(d.keys()) 
keys.sort() 
for key in keys: 
    print d[key] 

Edit: La solución de dF es mejor - Olvidé todo sobre sorted().

+0

Sí, pero ordenados no está disponible en pitón de más edad (pre 2.4), por lo que este lenguaje es todavía útil. – jmanning2k

16

¿Quiere decir que necesita los valores ordenados por el valor de la clave? En ese caso, esto debería hacerlo:

for key in sorted(d): 
    print d[key] 

EDIT: cambia para utilizar ordenados (d) en lugar de (ordenados d.keys()), gracias Eli!

+1

En realidad, puede decir "for key in sorted (d):" sin tener que decir "d.keys()" ya que iterar sobre un diccionario simplemente itera sobre sus teclas. –

16

o más corto,

for key, value in sorted(d.items()): 
    print value 
+0

no solo ordenado: evita las búsquedas –

+0

¿qué quiere decir exactamente con "evita las búsquedas"? ¿resulta en un mejor rendimiento? –

+1

@Ray: sí, usar "key, value" en el bucle for evita tener que hacer la búsqueda de tablas hash de d [key] para cada elemento en el diccionario. Creo que la solución anterior será más rápida, pero tendría que medirla en su sistema y conjunto de datos para estar seguro. –

1
>>> d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 
>>> for k,v in sorted(d.items()): 
...  print v, k 
... 
this is a a 
this is b b 
this is c c 
0
d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'} 
ks = d.keys() 
ks.sort() 
for k in ks: 
    print "this is " + k 
1
for key in sorted(d): 
    print d[key] 
1

También puede ordenar un diccionario por su valor y controlar el orden de clasificación:

import operator 

d = {'b' : 'this is 3', 'a': 'this is 2' , 'c' : 'this is 1'} 

for key, value in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True): 
    print key, " ", value 

Salida:
b este es 3
esto es un 2
c este es 1

0

Qué quiere decir "ordenados" en lugar de "ordenada"? Parece que su pregunta tiene como objetivo ordenar un diccionario y no ordenarlo. Si quiere decir "ordenado", puede usar un OrderedDict del módulo de colecciones. Esos diccionarios recordar el orden en que se introdujeron los pares clave/valor: la información

from collections import OrderedDict 

Referencia: https://docs.python.org/2/library/collections.html#collections.OrderedDict

Cuestiones relacionadas