As explained in another answer, you should not remove an item from the list while iterating over it, this can lead to a lot of problems. Another method that creates a completely new list would be -
import datetime lisdic = [] #list of dictionaries prev = None result = [] for i in lisdic: if not prev: prev = i elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1): prev['end'] = i['end'] else: result.append(prev) prev = i if prev: result.append(prev)
It will also handle similar intervals between several dictionaries (for example, the first 3 dictionaries in the list in DEMO below).
Demo -
>>> import datetime >>> lisdic = [{"begin":datetime.datetime(2015,10,2,10,0,0),"end":datetime.datetime(2015,10,2,10,30,0)}, ... {"begin":datetime.datetime(2015,10,2,10,30,1),"end":datetime.datetime(2015,10,2,11,0,0)}, ... {"begin":datetime.datetime(2015,10,2,11,0,1),"end":datetime.datetime(2015,10,2,12,0,0)}, ... {"begin":datetime.datetime(2015,10,3,10,0,0),"end":datetime.datetime(2015,10,3,10,30,0)}, ... {"begin":datetime.datetime(2015,10,3,11,0,0),"end":datetime.datetime(2015,10,3,11,30,0)}, ... {"begin":datetime.datetime(2015,10,4,12,0,0),"end":datetime.datetime(2015,10,2,12,10,0)}] >>> prev = None >>> result = [] >>> for i in lisdic: ... if not prev: ... prev = i ... elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1): ... prev['end'] = i['end'] ... else: ... result.append(prev) ... prev = i ... >>> >>> if prev: ... result.append(prev) ... >>> pprint.pprint(result) [{'begin': datetime.datetime(2015, 10, 2, 10, 0), 'end': datetime.datetime(2015, 10, 2, 12, 0)}, {'begin': datetime.datetime(2015, 10, 3, 10, 0), 'end': datetime.datetime(2015, 10, 3, 10, 30)}, {'begin': datetime.datetime(2015, 10, 3, 11, 0), 'end': datetime.datetime(2015, 10, 3, 11, 30)}, {'begin': datetime.datetime(2015, 10, 4, 12, 0), 'end': datetime.datetime(2015, 10, 2, 12, 10)}]