список питонов и дикт - PullRequest
       1

список питонов и дикт

0 голосов
/ 08 декабря 2018

Это моя тюрьма, с 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}

У меня есть еще один текстовый файл с пленниками:

{'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é'])

Но теперь мне нужно искать внутрипродиктовать тюрьму и заполнить ее пленником.

Спасибо.

1 Ответ

0 голосов
/ 09 декабря 2018

Идея состоит в том, что вы перебираете пленников и назначаете каждого из них в тюрьму, в которой уровень безопасности равен или превышает их опасность, а затем, чтобы снизить расходы, они назначаются в тюрьму с наименьшей степенью защиты.

# -*- 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...