=============================== RESTART: Shell =============================== >>> import time >>> from contextlib import contextmanager >>> @contextmanager def get_time(): start = time.time() yield end = time.time() print(end-start) >>> l = [['id0', 'pyt'], ['id0', 'hon'], ['id1', 'aiu'], ['id1', 'eo']] >>> l = l * 10000 >>> >>> from collections import defaultdict >>> >>> d = defaultdict(str) >>> with get_time(): for k,v in l: d[k] += v 0.04916644096374512 >>> >>> d = defaultdict(list) >>> with get_time(): for k,v in l: d[k].append(v) 0.011052608489990234 >>> >>> from itertools import groupby >>> with get_time(): d = [(k, ''.join([item[1] for item in i])) for k,i in groupby(l, key=lambda x:x[0])] 0.01807713508605957 >>> >>> with get_time(): d = {id:[i[1] for i in l if i[0]==id] for id in dict(l).keys()} 0.005514621734619141 >>> >>> =============================== RESTART: Shell =============================== >>> l = [['id0', 'pyt'], ['id0', 'hon'], ['id1', 'aiu'], ['id1', 'eo']] >>> for k,v in {id:[i[1] for i in l if i[0]==id] for id in dict(l).keys()}.items(): print(k, ''.join(v)) id0 python id1 aiueo >>>