这是我的监狱,男为M,女为F
prison = {'M': {1: {'prisonniers': [], 'sécurité': 90}, 2: {'prisonniers': [], 'sécurité': 55}, 3: {'prisonniers': [], 'sécurité': 17}}, 'F': {1: {'prisonniers': [1], 'sécurité': 60}, 2: {'prisonniers': [], 'sécurité': 36}}, 'taille': 6}
我还有另一个带有这样的俘虏的txt文件:
{'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}]
现在我需要将这些俘虏放进监狱,但我要尊重该师的安全级别必须高于或等于危险级别
所以我试图一一俘虏俘虏,以验证他们可以去哪个部门,然后我列出了所有部门的清单
list_of_division = [{'prisonniers': [], 'sécurité': '47'}, {'prisonniers': [], 'sécurité': '92'}, {'prisonniers': [], 'sécurité': '38'}]
然后我以最低的价格获得
:value = min(list_of_division, key= lambda elem: elem['sécurité'])
但是现在我需要在dict监狱中搜索并填充其中的俘虏。
谢谢。
答案 0 :(得分:1)
这个想法是,您要圈养俘虏,并将每个人分配到安全系数等于或高于其危险的监狱,然后为了降低成本,将他们分配给安全系数最小的监狱。
# -*- 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的Le Joker分配给安全等级为90的M1监狱。将危险等级为45的Wanda Maximoff分配给安全等级为60的F1监狱。