Pregunta Última clave en el diccionario de Python


Estoy teniendo dificultades para averiguar cuál sería la sintaxis de la última clave en un diccionario de Python. Sé que para una lista de Python, uno puede decir esto para denotar el último:

list[-1]

También sé que uno puede obtener una lista de las claves de un diccionario de la siguiente manera:

dict.keys()

Sin embargo, cuando intento utilizar el siguiente código lógico, no funciona:

dict.keys(-1)

Dice que las teclas no pueden tomar ningún argumento y se da 1. Si las teclas no pueden contener args, ¿cómo puedo denotar que quiero la última clave de la lista?

XXXXX Estoy operando bajo la suposición de que los diccionarios de Python están ordenados en el orden en que los elementos se agregan al diccionario con el último elemento más reciente. Por este motivo, me gustaría acceder a la última clave en el diccionario.XXXXX

Ahora me dicen que las claves del diccionario no están en orden en función de cuándo se agregaron. ¿Cómo podría entonces elegir la última clave agregada?


26
2018-04-20 21:10


origen


Respuestas:


Si el orden de inserción es importante, eche un vistazo a collections.OrderedDict:

Un OrderedDict es un dict que recuerda el orden en que se insertaron las claves por primera vez. Si una nueva entrada sobrescribe una entrada existente, la posición de inserción original no se modifica. Eliminar una entrada y reinsertarla lo moverá hasta el final.


In [1]: from collections import OrderedDict

In [2]: od = OrderedDict(zip('bar','foo'))

In [3]: od
Out[3]: OrderedDict([('b', 'f'), ('a', 'o'), ('r', 'o')])

In [4]: od.keys()[-1]
Out[4]: 'r'

In [5]: od.popitem() # also removes the last item
Out[5]: ('r', 'o')

27
2018-04-20 21:23



Parece que quieres hacer eso:

dict.keys()[-1]

dict.keys() devuelve una lista de las claves de tu diccionario. Una vez que haya obtenido la lista, el índice -1 le permite obtener el último elemento de una lista.

Como un diccionario no está ordenado, no tiene sentido obtener la última clave de su diccionario.

Tal vez quieras ordenarlos antes. Se vería así:

sorted(dict.keys())[-1]

21
2018-04-20 21:11



No tiene sentido pedir la "última" clave en un diccionario, porque las claves del diccionario son desordenado. Puede obtener la lista de claves y obtener la última si lo desea, pero eso no es en ningún sentido la "última clave en un diccionario".


16
2018-04-20 21:16



sorted(dict.keys())[-1]

De lo contrario, keys es solo una lista desordenada y la última no tiene ningún significado y puede ser diferente en varias versiones de Python.


4
2018-04-20 21:19



Hay una muy buena razón para querer la última clave de un OrderedDict. Utilizo un dict ordenado para listar a mis usuarios cuando los edito. Estoy usando llamadas AJAX para actualizar los permisos de los usuarios y para agregar nuevos usuarios. Como el AJAX se activa cuando se verifica un permiso, quiero que mi nuevo usuario permanezca en la misma posición en la lista mostrada (última) por comodidad hasta que vuelva a cargar la página. Cada vez que se ejecuta la secuencia de comandos, vuelve a ordenar el diccionario del usuario.

Eso está bien, ¿por qué necesita la última entrada? De modo que cuando estoy escribiendo pruebas de unidad para mi software, me gustaría confirmar que el usuario permanece en la última posición hasta que la página se vuelva a cargar.

dict.keys()[-1]

Realiza esta función perfectamente (Python 2.7).


3
2018-04-07 19:17



sí hay : len(data)-1.

Para el primer elemento, es: 0


-1
2017-10-13 17:16