Идея состоит в том, что вы перебираете пленников и назначаете каждого из них в тюрьму, в которой уровень безопасности равен или превышает их опасность, а затем, чтобы снизить расходы, они назначаются в тюрьму с наименьшей степенью защиты.
# -*- coding: utf-8 -*-
prisons = {'M': {1: {'prisonniers': [], 'sécurité': 90}, 2: {'prisonniers': [], 'sécurité': 55}, 3: {'prisonniers': [], 'sécurité': 17}}, 'F': {1: {'prisonniers': [], 'sécurité': 60}, 2: {'prisonniers': [], 'sécurité': 36}}, 'taille': 6}
captives = {'F': [{'nom': 'Wanda Maximoff', 'crimes': ['A conspiré avec Ultron', 'A agressé Vision', "A détruit l'aéroport de Vienne"], 'univers': 'Marvel', 'ID': 501988, 'danger': 45}], 'M': [{'nom': 'Le Joker', 'crimes': ['Meurtre', 'Braquage de banques', 'Mauvaises blagues'], 'univers': 'DC', 'ID': 48235, 'danger': 87}]}
for gender, captives in captives.items():
for captive in captives:
jails = filter(lambda elem: elem['sécurité'] >= captive['danger'],
prisons[gender].values())
if not jails:
print("No prison can hold:", captive['nom'])
continue
jail = min(jails, key=lambda elem: elem['sécurité'])
jail['prisonniers'].append(captive)
print(prisons)
Отпечатки:
{'taille': 6, 'M': {1: {'prisonniers': [{'univers': 'DC', 'nom': 'Le Joker', 'crimes': ['Meurtre', 'Braquage de banques', 'Mauvaises blagues'], 'ID': 48235, 'danger': 87}], 'sécurité': 90}, 2: {'prisonniers': [], 'sécurité': 55}, 3: {'prisonniers': [], 'sécurité': 17}}, 'F': {1: {'prisonniers': [{'univers': 'Marvel', 'nom': 'Wanda Maximoff', 'crimes': ['A conspiré avec Ultron', 'A agressé Vision', "A détruit l'aéroport de Vienne"], 'ID': 501988, 'danger': 45}], 'sécurité': 60}, 2: {'prisonniers': [], 'sécurité': 36}}}
То есть Ле Джокер с опасностью 87 был назначен в тюрьму M1 с защитой 90. А Ванда Максимофф с опасностью 45 была назначена в тюрьму F1 с защитой 60.