Python: ordenar por frecuencia del segundo elemento en la lista de tuplas

Dada la lista de tuplas, ordene por frecuencia del segundo elemento de la tupla.

Entrada : test_list = [(6, 5), (1, 7), (2, 5), (8, 7), (9, 8), (3, 7)]
Salida : [(1, 7), (8, 7), (3, 7), (6, 5), (2, 5), (9, 8)]
Explicación : 7 aparece 3 veces como segundo elemento, por lo que todas las tuplas con 7 se alinean primero.

Entrada : test_list = [(1, 7), (8, 7), (9, 8), (3, 7)]
Salida : [(1, 7), (8, 7), (3, 7), (9, 8)]
Explicación : 7 aparece 3 veces como segundo elemento, por lo tanto, todas las tuplas con 7 se alinean primero.

Método #1: Usar sorted() + loop + defaultdict() + lambda

En esto, calculamos la frecuencia usando defaultdict() y usamos este resultado para pasar como parámetro a la función lambda para realizar la clasificación usando sorted() en base a ello.

Python3

# Python3 code to demonstrate working of 
# Sort by Frequency of second element in Tuple List
# Using sorted() + loop + defaultdict() + lambda
from collections import defaultdict
  
# initializing list
test_list = [(6, 5), (2, 7), (2, 5), (8, 7), (9, 8), (3, 7)]
  
# printing original list
print("The original list is : " + str(test_list))
  
# constructing mapping
freq_map = defaultdict(int)
for idx, val in test_list:
    freq_map[val] += 1
  
# performing sort of result 
res = sorted(test_list, key = lambda ele: freq_map[ele[1]], reverse = True)
  
# printing results
print("Sorted List of tuples : " + str(res))
Producción

The original list is : [(6, 5), (2, 7), (2, 5), (8, 7), (9, 8), (3, 7)]
Sorted List of tuples : [(2, 7), (8, 7), (3, 7), (6, 5), (2, 5), (9, 8)]

Método #2: Usar Counter() + lambda + sorted()

En esto, la tarea de cálculo de frecuencia se realiza utilizando Counter(), el resto de la funcionalidad es similar al método anterior.

Python3

# Python3 code to demonstrate working of 
# Sort by Frequency of second element in Tuple List
# Using Counter() + lambda + sorted()
from collections import Counter
  
# initializing list
test_list = [(6, 5), (2, 7), (2, 5), (8, 7), (9, 8), (3, 7)]
  
# printing original list
print("The original list is : " + str(test_list))
  
# constructing mapping using Counter
freq_map = Counter(val for key, val in test_list)
  
# performing sort of result 
res = sorted(test_list, key = lambda ele: freq_map[ele[1]], reverse = True)
  
# printing results
print("Sorted List of tuples : " + str(res))
Producción

The original list is : [(6, 5), (2, 7), (2, 5), (8, 7), (9, 8), (3, 7)]
Sorted List of tuples : [(2, 7), (8, 7), (3, 7), (6, 5), (2, 5), (9, 8)]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *