- You need to sort the data before applying
groupby
You need to specify the key as a function, not a string
from itertools import groupby with open('Input.txt') as fin: lines = sorted([line.rstrip() for line in fin]) for item, grp in groupby(lines, key = lambda x:x.split(".")[0]): print item, list(grp)
Output
AFJ ['AFJ.SPZ.IR.3 46.812 38.433', 'AFJ.SPZ.IR.8 46.84 38.463', 'AFJ.SPZ.IR.8 46.84 38.463']
AKL ['AKL.SPZ.IR.11 46.691 38.399', 'AKL.SPZ.IR.11 46.691 38.399', 'AKL.SPZ.IR.12 46.722 38.407', 'AKL.SPZ.IR.12 46.722 38.407', 'AKL.SPZ.IR.13 46.654 38.404', 'AKL.SPZ.IR.25 46.699 38.442', 'AKL.SPZ.IR.3 46.812 38.433', 'AKL.SPZ.IR.8 46.84 38.463']
ALA ['ALA.SPZ.IR.3 46.812 38.433']
ANAR ['ANAR.BHZ.IR.8 46.84 38.463']
ANJ ['ANJ.SPZ.IR.13 46.654 38.404', 'ANJ.SPZ.IR.18 46.662 38.399', 'ANJ.SPZ.IR.3 46.812 38.433']
BST ['BST.SPZ.IR.1 46.732 38.457', 'BST.SPZ.IR.10 46.707 38.448', 'BST.SPZ.IR.11 46.691 38.399', 'BST.SPZ.IR.12 46.722 38.407']