Python将值均匀分布到字典中的列表

2024-09-26 22:53:25 发布

您现在位置: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)

输出:

^{pr2}$

效果很好。然而,我不知道如何让它尽可能均匀地分配数字。有些员工有2个号码,有些有8个号码。有什么建议吗?在

谢谢!在


Tags: 代码nameinnumberfor员工数字号码
2条回答

由于您希望分配所有编号,因此可以随机化编号顺序,而不是员工:

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

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

^{pr2}$

[start::n]语法选择从start开始的第n项。第一个员工得到项目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)

假设人数与雇员人数相等,你可以这样做:

import random
import collections


employees = ["empA", "empB", "empC", "empD", "empE", "empF"]  # employee names
numbers = list(range(1, 27))  # numbers from 1..26

emp_numbers = collections.defaultdict(list)  # collects the employee numbers
random.shuffle(numbers)  # shuffle the numbers to distribute

for i, number in enumerate(numbers):  # get the index of the number and the number
    employee = employees[i % len(employees)]  # round-robin over the employees...
    emp_numbers[employee].append(number)  # ... and associate a number with a name.

print(emp_numbers)

输出,例如

^{pr2}$

如果这些数字不能平均整除,有些人会得到比其他人更多的数字。在

相关问题 更多 >

    热门问题