What is the fastest way to select N items at a time from a dictionary? I'm iterating over a dictionary of many thousands of items. I want to operate on only 100 items at a time. I want to avoid copying items using any sort of slicing. Does itertools copy items?
This works, but is ugly: >>> from itertools import * >>> D = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8, 'i':9, 'j':10} >>> N = 3 >>> for G in izip(*[chain(D.items(), repeat(None, N-1))]*N): ... print G ... (('a', 1), ('c', 3), ('b', 2)) (('e', 5), ('d', 4), ('g', 7)) (('f', 6), ('i', 9), ('h', 8)) (('j', 10), None, None) I'd prefer the last sequence not return None elements and instead just return (('j',10)), but this isn't a huge deal. This works and is clear, but it makes copies of items: >>> ii = D.items() >>> for i in range (0, len(ii), N): ... print ii[i:i+N] ... [('a', 1), ('c', 3), ('b', 2)] [('e', 5), ('d', 4), ('g', 7)] [('f', 6), ('i', 9), ('h', 8)] [('j', 10)] -- Noah -- http://mail.python.org/mailman/listinfo/python-list