Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将值均匀地分布到字典中的列表中_Python - Fatal编程技术网

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

Python将值均匀地分布到字典中的列表中,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 = {}
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)
numbers = list(range(1, 27))
random.shuffle(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个。有没有关于如何让它这样做的建议


谢谢

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

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)
输出,例如

{'empF': [25, 4, 9, 21], 'empD': [2, 10, 3, 11], 'empE': [18, 5, 17, 15], 'empB': [7, 24, 26, 6, 8], 'empC': [1, 14, 13, 12], 'empA': [16, 23, 20, 19, 22]}

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

因为你想分配所有数字,你可以随机排列数字的顺序,而不是员工:

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)
numbers = list(range(1, 27))
random.shuffle(numbers)
然后,您可以使用切片为每个员工获得偶数计数:

for idx, employee in enumerate(employees):
    emp_numbers[employee] = numbers[idx::len(employees)]
[start::n]
语法选择从
start
开始的每个
n
项。第一个员工获取项目0、6、12,…,第二个员工获取项目1、7、13,…,依此类推