DefaultDict, en los elementos agregados, mantiene las claves ordenadas en el orden de adición

defaultdict(list) un defaultdict(list) vacío defaultdict(list) , y lo estoy agregando. Quiero que las claves se ordenen en orden de adición. Mi código toma una entrada.

Entrada:

 4 bcdef abcdefg bcde bcdef 

Mi código:

 from collections import defaultdict d = defaultdict(list) a = int(input()) for i in range(a): temp = raw_input() d[temp].append(i) for k in d: print k 

Salida:

 bcde bcdef abcdefg 

Salida deseada

 bcdef abcdefg bcde 

Puede utilizar collections.OrderedDict para mantener el orden de la inserción de claves.

 >>> from collections import OrderedDict >>> d = OrderedDict() >>> for i in range(4): ... d.setdefault(input(), []).append(i) ... bcdef abcdefg bcde bcdef >>> print("\n".join(d)) bcdef abcdefg bcde 

Aquí, usamos el método setdefault , que establecerá el valor predeterminado (el segundo argumento) para la clave, si aún no se encuentra en el diccionario. Y setdefault devuelve el valor correspondiente a la clave, por lo que en este caso, si la clave no está allí, se asigna una nueva lista contra la clave y se devolverá. Si la clave ya existe, se devolverá la lista existente correspondiente. Y simplemente llamamos append en la lista devuelta.