我有一个列表和一个字典列表,我想把列表中的项目分配给字典中的两个键之一。字典中的两个键都必须指定值,每个字典中的项不应出现一次以上,并且每个项的分布应平衡。你知道吗
我要用水果:
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)
这种方法的问题是,我得到了一个水果分配不平衡。可能还有更多的篮子。你知道吗
有没有办法在每个篮子槽中实现水果的均匀分配?你知道吗
编辑-输出是更新的“篮子”列表,所有水果槽都已填满。你知道吗
为什么不使用简单的循环赛:
通过设计使分布均衡。唯一需要注意的是,一旦你知道什么是一个篮子里的水果1,水果2就会自动确定。如果您不喜欢,您可以为每种可能的水果使用下一种水果:
对于第一个篮子,每个水果后面紧跟着下一个,但一旦其中一个被重新用作
fruit1
,相应的fruit2
就会是下一个。这里绝对没有随机性,但分布覆盖了所有可能的情况,概率相当(发生率)由于这个问题还不清楚,这个代码将统一地用一个随机的水果填充每个篮子。缺点是它需要至少和篮子里的位置一样多的水果选择。你知道吗
相关问题 更多 >
编程相关推荐