Есть несколько вариантов в зависимости от того, что вы ищете:
dictionary = {0: 123, 10: 345, 20: 678, 30: 123, 40: 345, 50: 678, 60: 123, 70: 345, 80: 678 ,90: 123 }
1) Фиксированное количество слотов в списке (т. Е. Всегда 10):
slotCount = len(dictionary)//10
items = sorted(dictionary.items())
listOfDict = [ dict(items[i:i+ slotCount])
for i in range(0,len(items),slotCount) ]
listOfDict += [ {} for _ in range(slotCount,len(items),-1) ]
2) Фиксировано количество записей на слоты (переменное число слотов):
bucketSize = 10
items = sorted(dictionary.items())
listOfDict = [ dict(items[i:i+bucketSize])
for i in range(0,len(items),bucketSize) ]
3) Сбалансированное количество записей и слотов:
bucketSize = int(len(dictionary)**0.5)
items = sorted(dictionary.items())
listOfDict = [ dict(items[i:i+bucketSize])
for i in range(0,len(items),bucketSize) ]
4) Равномерно распределенные данные по 10 слотам в list:
slotCount = 10
listOfDicts = [ {k:v for k,v in dictionary.items()
if abs(hash(str(k))) % slotCount == i}
for i in range(slotCount) ]
Примечание: все эти методы позволят определить, к какому слоту принадлежит ключ после создания списка. Первые 3 подхода разбивают словарь в отсортированном порядке ключа, поэтому можно использовать алгоритм биссектриса поиска. Четвёртое просто использует функцию хеширования, которая напрямую возвращает номер слота ключа