[python] Claves del diccionario, ordenando por valor


   Los diccionarios en Python están desordenados de forma predeterminada y muchos escenarios de aplicaciones requieren ordenar las claves y valores del diccionario, por lo que la clasificación de diccionarios en Python se ha convertido en un tema frecuente en las entrevistas.

  Antes de ingresar el texto, primero creemos un diccionario con el nombre como clave y la edad como valor :

d = {
    
    'Caitlyn': 21, 'Darius': 45, 'Bard': 33, 'Ezreal': 24, 'Akali': 31, 'Fiora': 43}

  ¿Cómo ordenar el diccionario según claves y valores?

>>> d.keys()
dict_keys(['Caitlyn', 'Darius', 'Bard', 'Ezreal', 'Akali', 'Fiora'])
>>> d.values()
dict_values([21, 45, 33, 24, 31, 43])

1. Ordenar por clave

1.1 Análisis de ideas

Antes de ordenar las claves, obtenga la lista de claves:

>>> list(d.keys())
['Caitlyn', 'Darius', 'Bard', 'Ezreal', 'Akali', 'Fiora']

Ordene la lista por ordenado:

>>> sorted(list(d.keys())) 
['Akali', 'Bard', 'Caitlyn', 'Darius', 'Ezreal', 'Fiora']

ordenado en Python admite la clasificación de claves directamente:

>>> sorted(d.keys())        
['Akali', 'Bard', 'Caitlyn', 'Darius', 'Ezreal', 'Fiora']

Si es en orden inverso, simplemente configure "reverse=True"

>>> sorted(d.keys(), reverse=True) 
['Fiora', 'Ezreal', 'Darius', 'Caitlyn', 'Bard', 'Akali']

Después de eso, la generación de un diccionario ordenado se puede lograr combinando la fórmula de producción :

>>> {
    
    k:d[k] for k in sorted(d.keys())} 
{
    
    'Akali': 31, 'Bard': 33, 'Caitlyn': 21, 'Darius': 45, 'Ezreal': 24, 'Fiora': 43}
>>> dict(sorted(d.items()))                        
{
    
    'Akali': 31, 'Bard': 33, 'Caitlyn': 21, 'Darius': 45, 'Ezreal': 24, 'Fiora': 43}

1.2 Resumen de métodos

dict(sorted(d.items()))
dict(sorted(list(d.items())))
dict(sorted(list(dic.items()),key=lambda x:x[0]))
{
    
    k:d[k] for k in sorted(d.keys())} 
{
    
    k:d[k] for k in sorted(list(d.keys()))} 
dict(sorted([(k,v) for k,v in d.items()])
dict(sorted([(k,v) for k,v in d.items()],key=lambda x:x[0]))

2. Ordenar por valor

2.1 Análisis de ideas

2.1.1 Generar una lista de tuplas de pares clave-valor

La clasificación por valor debe vincular la clave para ordenar; de lo contrario, la clave no se puede obtener en función del valor. Aquí usamos el generador de compilación zip para el enlace:

>>> zip(d.keys(),d.values())     
<zip object at 0x000001F676EF8840>

Luego conviértalo en una lista para su posterior clasificación:

>>> list(zip(d.keys(),d.values()))
[('Caitlyn', 21), ('Darius', 45), ('Bard', 33), ('Ezreal', 24), ('Akali', 31), ('Fiora', 43)]

Los dos pasos anteriores también pueden utilizar listas de tuplas para lograr la vinculación clave-valor:

>>> [(k,d[k]) for k in d.keys()] 
[('Caitlyn', 21), ('Darius', 45), ('Bard', 33), ('Ezreal', 24), ('Akali', 31), ('Fiora', 43)]

2.1.2 Ordenar la lista de tuplas clave-valor

Luego use el método ordenado para especificar que las tuplas se ordenen por valor (x[1]):

>>> sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])
[('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

También puedes ordenar la lista (zip()):

>>> sorted(list(zip(d.keys(), d.values())), key=lambda x:x[1]) 
[('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

Python también admite la clasificación directa de zip():

>>> sorted(zip(d.keys(), d.values()), key=lambda x:x[1])       
[('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

Para establecer el orden descendente por edad, utilice reverse=True:

>>> sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1], reverse=True) 
[('Darius', 45), ('Fiora', 43), ('Bard', 33), ('Akali', 31), ('Ezreal', 24), ('Caitlyn', 21)]

2.1.3 Generar diccionario basado en lista

Luego use el método de generación de diccionario para generar el diccionario:

>>> {
    
    tup[0]:tup[1] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])} 
{
    
    'Caitlyn': 21, 'Ezreal': 24, 'Akali': 31, 'Bard': 33, 'Fiora': 43, 'Darius': 45}

2.2 Resumen de métodos

dict(sorted(d.items(),key=lambda x:x[1]))
dict(sorted(list(d.items()),key=lambda x:x[1]))
dict(sorted([(k,v) for k,v in d.items()],key=lambda x:x[1]))

{
    
    k:v for (k,v) in sorted(zip(d.keys(),d.values()), key=lambda x:x[1])}
{
    
    k:v for (k,v) in sorted(list(zip(d.keys(),d.values())), key=lambda x:x[1])}

{
    
    k:v for (k,v) in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}
{
    
    k:d[k] for (k,v) in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}
{
    
    tup[0]:tup[1] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}
{
    
    tup[0]:d[tup[0]] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}

Lectura recomendada:
[python] Resumen de métodos de creación de diccionarios
[python] Uso de expresiones generativas
Para conocer más métodos de uso y aplicaciones de Python, preste atención a las actualizaciones posteriores ~

Supongo que te gusta

Origin blog.csdn.net/weixin_44844635/article/details/131381675
Recomendado
Clasificación