On Tue, Jul 19, 2011 at 7:20 AM, J <jnr.gonza...@googlemail.com> wrote: > Hi guys, > > Thank you for your suggestions. I have managed to get my whole script to > execute in under 10 seconds by changing the 'for loop' I posted above to the > following:- > > for opco in Cn: > for service in Cn[opco]: > ack = set(Cn[opco][service]['RECV']) & set(Pr['13']) > for jarid in ack: > Cn[opco][service].setdefault('ACK', set()).add(jarid) > nack = set(Cn[opco][service]['RECV']) & set(Pr['14']) > for jarid in nack: > Cn[opco][service].setdefault('NACK', set()).add(jarid) > retry = set(Cn[opco][service]['RECV']) & set(Pr['504']) > for jarid in retry: > Cn[opco][service].setdefault('RETRY', set()).add(jarid) > retry1 = set(Cn[opco][service]['RECV']) & set(Pr['505']) > for jarid in retry1: > Cn[opco][service].setdefault('RETRY', set()).add(jarid)
Code duplication ahoy! Let's refactor that: pairs = [('ACK', '13'), ('NACK', '14'), ('RETRY', '504'), ('RETRY', '505')] for opco in Cn: for service in Cn[opco]: for msg, prkey in pairs: ids = set(Cn[opco][service]['RECV']) & set(Pr[prkey]) for jarid in ids: Cn[opco][service].setdefault(msg, set()).add(jarid) Cheers, Chris -- http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list