python - Python 将值均匀分配到字典中的列表
问题描述
我有以下代码随机分配数字给员工:
emp_numbers = {}
employees = ['empA', 'empB', 'empC', 'empD', 'empE', 'empF']
numbers = 26
for x in employees:
emp_numbers[x] = []
emp = list(emp_numbers.keys())
for number in range(1, numbers+1):
emp_name = choice(emp);
emp_numbers[emp_name].append(number)
print (emp_numbers)
输出:
{'empA': [4, 25], 'empB': [2, 10, 11, 15, 18, 20, 22, 23], 'empC': [5, 13, 21, 24], 'empD': [3, 6, 7, 8, 12, 16, 19, 26], 'empE': [14], 'EmpF': [1, 9, 17]}
它工作得很好。但是,我不知道如何让它尽可能均匀地分配数字。有些员工得到 2 个号码,有些员工得到 8 个号码。关于如何获得它的任何建议?
谢谢!
解决方案
由于您要分配所有数字,因此您可以随机化数字的顺序而不是员工:
numbers = list(range(1, 27))
random.shuffle(numbers)
然后,您可以使用切片来获得每个员工的偶数计数:
for idx, employee in enumerate(employees):
emp_numbers[employee] = numbers[idx::len(employees)]
[start::n]
语法选择从 开始的每个' n
th 项目start
。第一个员工获得项目 0、6、12、...,第二个员工获得项目 1、7、13、...,依此类推。
import random
# initial setup
employees = ['empA', 'empB', 'empC', 'empD', 'empE', 'empF']
numbers = list(range(1, 26+1))
# dict to hold assignment and randomly shuffled numbers
employee_numbers = {}
random.shuffle(numbers)
# assign shuffled numbers to employees
for idx, employee in enumerate(employees):
employee_numbers[employee] = numbers[idx::len(employees)]
# print result
print(employee_numbers)