另一个解决方案,使用itertools.cycle
:
import random
from itertools import cycle
persons = ["foo", "bar", "baz"]
items = ["hat", "bag", "ball", "bat", "shoe", "stick", "pie", "phone"]
random.shuffle(items)
out = {}
for p, i in zip(cycle(persons), items):
out.setdefault(p, []).append(i)
print(out)
打印(例如):
{
"foo": ["phone", "pie", "bat"],
"bar": ["bag", "stick", "hat"],
"baz": ["shoe", "ball"],
}
如果条目可能比人少,并且每个人都应该在输出词典中有关键字,则可以使用:
import random
from itertools import cycle
persons = ["foo", "bar", "baz"]
items = ["hat", "bag", "ball", "bat", "shoe", "stick", "pie", "phone"]
random.shuffle(items)
random.shuffle(persons) # to randomize who gets fewest items
out = {p: [] for p in persons}
for lst, i in zip(cycle(out.values()), items):
lst.append(i)
print(out)