首页 > 解决方案 > 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 个号码。关于如何获得它的任何建议?

谢谢!

标签: python

解决方案


由于您要分配所有数字,因此您可以随机化数字的顺序而不是员工:

numbers = list(range(1, 27))
random.shuffle(numbers)

然后,您可以使用切片来获得每个员工的偶数计数:

for idx, employee in enumerate(employees):
    emp_numbers[employee] = numbers[idx::len(employees)]

[start::n]语法选择从 开始的每个' nth 项目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)

推荐阅读