1
votes

regrouper la sous-liste séparément dans la liste en fonction de la condition en python

J'ai une sous-liste

finallist=[[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127]],[['RD-3','a',120],['RD-3','b',140]],['RD-5','a',120]]

Je veux créer des sous-listes séparées dans la liste en fonction du 1er élément de chaque sous-liste si c'est le même. La sortie devrait être comme ci-dessous

list=[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]

J'ai essayé dans forloop en utilisant la condition if mais cela ne fonctionne pas. aidez-moi


1 commentaires

C'est génial que vous ayez déjà essayé quelque chose! Si vous pouvez nous montrer ce que vous avez essayé et l'erreur que vous avez obtenue, nous pouvons mieux comprendre et vous aider


3 Réponses :



3
votes

Utilisation de itertools.groupby

[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]

Sortie:

from itertools import groupby

lst=[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]

res = [list(v) for i, v in groupby(lst, lambda x: x[0])]   #GroupBy first element. 
print(res)


1 commentaires

Lorsque vous avez le temps. Veuillez expliquer la déclaration de res, comment avez-vous écrit la logique. parce que j'essayais à l'intérieur de forloop en utilisant la condition if. pouvez-vous diviser les "res" en code sans lambda. Vraiment merci pour l'aide



2
votes

Sans obligation de commande, vous pouvez utiliser des collections .defaultdict :

from collections import defaultdict

L = [['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],
     ['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]

dd = defaultdict(list)

for key, value1, value2 in L:
    dd[key].append([value1, value2])

## Python 3.x, use * unpacking
# for key, *values in L:
#     dd[key].append(values)

res = [[[key, value] for value in values] for key, values in dd.items()]

print(res)

# [[['RD-2', ['a', 120]], ['RD-2', ['b', 125]], ['RD-2', ['c', 127]]],
#  [['RD-3', ['a', 120]], ['RD-3', ['b', 140]]],
#  [['RD-5', ['a', 120]]]]


0 commentaires