Un altro metodo è iteratori zippare:
>>> from itertools import izip_longest, ifilter
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8}
creare una lista con le copie di iteratori dict (numero di copie è il numero di elementi in dicts risultato). Passando ogni iteratore dall'elenco a izip_longest
, otterrete il numero necessario di elementi dalla dicitura di origine (ifilter
utilizzata per rimuovere None
dai risultati zip). Con l'espressione del generatore è possibile ridurre l'utilizzo della memoria:
>>> chunks = [d.iteritems()]*3
>>> g = (dict(ifilter(None, v)) for v in izip_longest(*chunks))
>>> list(g)
[{'a': 1, 'c': 3, 'b': 2},
{'e': 5, 'd': 4, 'g': 7},
{'h': 8, 'f': 6}]
Non continuare a chiamare "elementi". Stai creando un nuovo elenco di tutti gli elementi ogni volta che desideri una porzione. – user2357112
sì lo so, ma il problema è che non riesco a trovare un metodo diverso per dividere il mio dizionario in blocchi di dimensioni uguali. – badc0re
Prova la [ricetta 'cernia' da' itertools'] (https://docs.python.org/2.7/library/itertools.html#recipes). – jonrsharpe