Python | Ordenar tupla según la ocurrencia del primer elemento

Dada una lista de tuplas, escriba un programa de Python para ordenar la lista en función de la aparición del primer elemento de las tuplas.

Ejemplos:

Input : [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
Output : [(1, 'Jake', 'Cara', 2), (2, 'Bob', 1)]

Input : [('b', 'ball'), ('a', 'arm'), ('b', 'b'), ('a', 'ant')]
Output : [('a', 'arm', 'ant', 2), ('b', 'ball', 'b', 2)]

Enfoque #1: usandodict.fromkeys

El fromkeys()método devuelve un nuevo diccionario con la secuencia dada de elementos como claves del diccionario. Ahora, una vez que almacenamos el nuevo diccionario en ‘dct’, podemos iterar fácilmente sobre los elementos ‘dct’ y generar los elementos deseados.

# Python3 program to Sort tuple based 
# on occurrence of first element
def sortOnOccurence(lst):
    dct = {}
    for i, j in lst:
        dct.setdefault(i, []).append(j)
    return([(i, *dict.fromkeys(j), len(j))
                 for i, j in dct.items()])
  
# Driver code
lst = [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
print(sortOnOccurence(lst))
Producción:

[(1, 'Cara', 'Jake', 2), (2, 'Bob', 1)]

Enfoque #2:OrderedDict desde el módulo de colecciones

Este método es una alternativa al enfoque mencionado anteriormente. Seguimos un enfoque similar pero con un ligero cambio, concatenamos las tuplas mientras iteramos a través de ‘dct’ usando OrderedDict .

# Python3 program to Sort tuple based 
# on occurrence of first element
from collections import OrderedDict
  
def sortOnOccurence(lst):
    dct = {}
    for i, j in lst:
        dct.setdefault(i, []).append(j)
    return([(k, ) + tuple(OrderedDict.fromkeys(v)) + (len(v), )
    for k, v in dct.items()])
  
# Driver code
lst = [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
print(sortOnOccurence(lst))
Producción:

[(1, 'Jake', 'Cara', 2), (2, 'Bob', 1)]

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal 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 *