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
3 Réponses :
Si les groupes sont toujours contigus, vous pouvez utiliser groupby a >, sinon vous pouvez trier les sous-listes en fonction du premier élément, puis grouper: Sortie [[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]
from itertools import groupby
from operator import itemgetter
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]]
result = [list(v) for _, v in groupby(lst, key=itemgetter(0))]
print(result)
Utilisation de itertools.groupby
Sortie: [[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]
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)
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
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]]]]
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