Скажем, у меня есть два объекта словаря, таких как:
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
. Функция, которую я должен публиковать здесь, слишком длинная, более 50 строк, чтобы публиковать здесь, но в основном она смотрит на несоответствие и, если она есть, создает sample_counter и использует ее для случайной выборки одного из членов из списка членов. для этого провайдеры. Он должен начинаться со случая, когда есть одно несоответствие, например, с «PCP4», только два members
запросили его / ее, поэтому функция будет выбирать между двумя из них и выбирать один, добавлять в словарь совпадений и удалять их от members
и этого "PCP4" от providers
, так как они теперь заполнены. Затем для этого члена, который был выбран из случайного выбора, они остаются в members
, но теперь их список PCP содержит только других поставщиков, поскольку «PCP4» был удален из их списка выбора.
Результат будет выглядеть например, если «member4» не был выбран из random.sample и, таким образом, был найден и теперь находится вне пула:
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
не останется больше «членов». но мне было интересно, есть ли более эффективный способ сделать это.