Inną metodą jest iteratory skompresowanie:
>>> from itertools import izip_longest, ifilter
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8}
Tworzenie listy z kopiami iteratorów DICT (liczba kopii jest liczba elementów w dicts wynikowych). Przekazując każdy iterator z listy chunks
do izip_longest
otrzymasz potrzebną liczbę elementów z źródła dict (ifilter
, które zostały użyte do usunięcia None
z wyników zip). Z wyrażeniem generatora można zmniejszyć zużycie pamięci:
>>> 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}]
Nie wywoływać "przedmiotów". Tworzysz nową listę wszystkich przedmiotów za każdym razem, gdy chcesz tylko kawałek. – user2357112
Tak, wiem o tym, ale problem polega na tym, że nie mogę znaleźć innej metody dzielenia słownika na porcje o równych rozmiarach. – badc0re
Spróbuj przepisu '' grouper' z 'itertools'] (https://docs.python.org/2.7/library/itertools.html#recipes). – jonrsharpe