Sto cercando di raggruppare elementi simili in un elenco basato sui primi tre caratteri nella stringa. Per esempio:Come raggruppare oggetti simili in un elenco?
test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
Come posso raggruppare gli elementi della lista di cui sopra in gruppi sulla base del primo gruppo di lettere (ad esempio 'abc'
)? Quanto segue è la produzione diretta:
output = {1: ('abc_1_2', 'abc_2_2'), 2: ('hij_1_1',), 3: ('xyz_1_2', 'xyz_2_2')}
o
output = [['abc_1_2', 'abc_2_2'], ['hij_1_1'], ['xyz_1_2', 'xyz_2_2']]
Ho provato con itertools.groupby
per raggiungere questo senza successo:
>>> import os, itertools
>>> test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
>>> [list(g) for k.split("_")[0], g in itertools.groupby(test)]
[['abc_1_2'], ['abc_2_2'], ['hij_1_1'], ['xyz_1_2'], ['xyz_2_2']]
Ho esaminato i seguenti messaggi senza successo:
How to merge similar items in a list. L'esempio raggruppa elementi simili (ad esempio 'house'
e 'Hose'
) utilizzando un approccio che è troppo complicato per il mio esempio.
How can I group equivalent items together in a Python list?. È qui che ho trovato l'idea per la comprensione delle liste.
Grazie, funziona benissimo. Recentemente ho scoperto che è una buona pratica assicurarsi che l'elenco di input sia ordinato per es. 'test = ordinato (['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2'])'. Altrimenti, se l'elenco di input non è ordinato, 'itertools.groupby' non funzionerà come previsto. – Borealis
Sì, l'ordinamento dell'elenco è una buona pratica quando si utilizza 'itertools.groupby'. Questo perché 'groupby' acquisisce solo esecuzioni di valori simili. Significa che può mancare qualcosa se la lista non è ordinata. Non mi sono preoccupato di menzionarlo nel mio post, anche perché l'obiettivo principale era su come usare 'groupby' e anche il tuo elenco era già stato ordinato. – iCodez