У меня есть список и список словарей, и я хочу назначить элементы из списка одному из двух ключей в словарях. Оба ключа в словарях должны иметь назначенные значения, ни один элемент не должен появляться более одного раза в каждом словаре, а распределение каждого элемента должно быть сбалансированным.Присвоить элементы равномерным словарным клавишам
Я собираюсь использовать плоды:
fruits = ['apple', 'orange', 'banana', 'papaya', 'kiwi']
baskets = [{'basket': 'one', 'fruit1': '', 'fruit2': ''},
{'basket': 'two', 'fruit1': '', 'fruit2': ''},
{'basket': 'three', 'fruit1': '', 'fruit2': ''},
{'basket': 'four', 'fruit1': '', 'fruit2': ''}]
Количество корзин не имеет значения.
Это, как я это делаю в данный момент:
import itertools
def in_basket(frt, bskt):
if frt in bskt.values():
return True
else:
return False
g = itertools.cycle(fruits)
fruit = next(g)
for basket in baskets:
basket['fruit1'] = fruit
fruit = next(g)
for basket in baskets:
while True:
if not in_basket(fruit, basket):
basket['fruit2'] = fruit
break
else:
fruit = next(g)
Проблема с этим подходом является то, что я получаю дисбаланс с распределением плодов. Там может быть намного больше корзин.
Есть ли способ добиться равномерного распределения фруктов в каждом слоте корзины?
Редактировать - выход представляет собой обновленный список «корзин» с заполненными слотами фруктов.
Каков требуемый результат (список образцов) для списков, которые вы упомянули? –
Да, я знаю, что я ленив, но не могли бы вы привести пример того, как должен выглядеть ваш выход? –
Результат - это просто обновленный список словарей «корзины». – rafello