创建自增函数

Creating a self incrementing function

假设我有两个字典对象,例如:

members = {"member1" : ["PCP1", "PCP2", "PCP3"],
          "member2": ["PCP1", "PCP2", "PCP3"],
          "member3": ["PCP1", "PCP2", "PCP3"],
          "member4": ["PCP1", "PCP2", "PCP4"],
          "member5": ["PCP1", "PCP3", "PCP4"]}

providers = {"PCP1": 2, "PCP2": 1, "PCP3": 2, "PCP4": 1}

我创建了一个函数来计算每个提供者 (PCP) 的请求计数与每个提供者的实际可用插槽之间的差异,如 providers 中所示。我必须在此处 post 的函数太长,超过 50 行,在此处 post 但基本上它会查看差异,如果存在差异,它会创建一个 sample_counter 并使用它来从该提供商的成员列表中随机抽取一名成员。它应该从存在一个差异的情况开始,例如 "PCP4",只有两个 members 请求 him/her 因此函数将在两者之间进行选择并选择一个并附加到一个匹配字典,并将它们从 members 中删除,并将 "PCP4" 从 providers 中删除,因为它们现在已满。然后,对于从随机选择中选择的那个成员,他们仍然在 members 中,但现在他们的 PCP 列表只包含其他提供者,因为 "PCP4" 已从他们的选择列表中删除。

例如,如果未从 random.sample 中选择 "member4",那么结果将如下所示,因此已匹配但现在不在池中:

members = {"member1" : ["PCP1", "PCP2", "PCP3"],
          "member2": ["PCP1", "PCP2", "PCP3"],
          "member3": ["PCP1", "PCP2", "PCP3"],,
          "member5": ["PCP1", "PCP3"]}

providers = {"PCP1": 2, "PCP2": 1, "PCP3": 2}

matches = {"member4" : "PCP4"}

我创建了一个函数,如果需要我会分享它,它会在计数之间只有一个差异时进行随机选择,因此只有 1 个样本,但我想要一些它不断上升的东西,比如选择两个差是两个,依此类推。我可以基本上一遍又一遍地编写相同的函数,只需执行 2、然后是 3、4,依此类推,直到 members 中不再有 "members"。但想知道是否有更有效的方法。

如果您 post 您的功能,它可能会有很大帮助,但根据您提供的信息,我认为解决方案可能是:

假设您使用函数:difference_function 而你详述的两个字典就是这个函数的参数。

然后您可以迭代字典:members.items() 并将 members 的每个键的差异存储在另一个字典中。然后只需迭代一个列表:[1, 2, .... size(members)] 并将此列表的每一列用作差异字典的键。

在 python 中的代码可能是(不确定字典的 size/len):

dict_discrepancies={}
for key, el in members.items():
    dict_discrepancies[difference_function(el)]=key

#To access to the different discrepancies by order
for i in range(0, len(members)):
    #This is the member with i discrepancy
    members[dict_discrepancies[i]]