TransWikia.com

Clasificar elementos de una tupla dentro de una lista en base a elementos coincidentes de las tuplas

Stack Overflow en español Asked by Jalkhov on December 22, 2020

La verdad batallé un poco para elegir el título de la pregunta, y aún no se si es del todo descriptivo o adecuado, así que me disculpo de antemano. Básicamente el problema lo tengo resuelto:

SeatsC = [(1, 'LAT'), (2, 'MOD'), (1, 'BET')]

Seats = {}

for x in SeatsC:
    if x[0] in Seats:
        if len(Seats[x[0]]) == 0:
            Seats[x[0]] = []
            Seats[x[0]].append(x[1])
        else:
            Seats[x[0]].append(x[1])
    else:
        Seats[x[0]] = []
        Seats[x[0]].append(x[1])

print(Seats)

Esta es la salida:

{1: ['LAT', 'BET'], 2: ['MOD']}

Este código me sirve para lo que necesito, pero quisiera saber es si hay una forma más Pythonica de hacer eso, siento que el código es demasiado complejo y poco entendible.

En resumen tenemos una lista con elementos del tipo tupla, y estas tuplas en ocasiones van a tener coincidencias en cuanto su primer elemento, específicamente números del 1 al 5, y quiero como salida lo que ya pueden ver.

One Answer

Puedes usar un defaultdict para simplificar el manejo: creas un diccionario que retorna una lista vacía cuando usas una llave inexistente:

from collections import defaultdict

SeatsC = [(1, 'LAT'), (2, 'MOD'), (1, 'BET')]
dic = defaultdict(list)
[dic[a].append(b) for a, b in SeatsC]
print(dic)

Correct answer by Candid Moe on December 22, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP