创建自增函数
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]]
假设我有两个字典对象,例如:
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]]