Supongamos que tengo un objeto Collections.OrderedDict y una lista reorganizada de sus claves:
ordereddict = collections.OrderedDict(( ('key_78', 'value'), ('key_40', 'value'), ('key_96', 'value'), ('key_53', 'value'), ('key_04', 'value'), ('key_89', 'value'), ('key_52', 'value'), ('key_86', 'value'), ('key_16', 'value'), ('key_63', 'value'), )) # Example only; actual list will **not** == sorted(ordereddict) key_list = ['key_04', 'key_16', 'key_40', 'key_52', 'key_53', 'key_63', 'key_78', 'key_86', 'key_89', 'key_96']
¿Cómo puedo ordenar OrderedDict
para que se ordene de la misma manera que key_list
?
Solo crea un nuevo OrderedDict:
newdct = OrderedDict((key, olddct[key]) for key in sortedlist)
Si realmente necesita que esto suceda en su lugar , puede borrar el olddct y actualizarlo con el nuevo:
olddct.clear() olddct.update(newdct)
Usa lo siguiente:
def sort_by_list(dict_, list_): for key in list_: dict_.move_to_end(key) sort_by_list(ordereddict, key_list)
Esto solo funciona si la list_
contiene todas las claves en el dict, y en Python 3.2 o posterior.