Цикл внутри словаря с несколькими ключами - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь l oop внутри словаря с тремя ключами и изменить категорию значений (Bmax в данном случае). Основная цель состоит не в том, чтобы изменять значения самого словаря, а в том, чтобы l oop через словарь и получить его значения. Он мне нужен, чтобы потом сформулировать задачу оптимизации. Для этого я использую «дополнительные словари» (UNITS_DI C и TASKS_DI C). Эта идея работает в словаре с двумя ключами. Теперь мне нужно расширить его еще на три или более ключей.

UNIT_TASKS = {
        ('Heater',    'Heating', 'Pablo')   : {'Bmin': 0, 'Bmax': 100},
        ('Reactor_1', 'Reaction_1', 'Juan'): {'Bmin': 0, 'Bmax':  80}, 
        ('Reactor_1', 'Reaction_2', 'Pedro'): {'Bmin': 0, 'Bmax':  80}, 
        ('Reactor_1', 'Reaction_3', 'Pablo'): {'Bmin': 0, 'Bmax':  80}, 
        ('Reactor_2', 'Reaction_1', 'Pablo'): {'Bmin': 0, 'Bmax':  80},
        ('Reactor_2', 'Reaction_2', 'Juan'): {'Bmin': 0, 'Bmax':  80}, 
        ('Reactor_2', 'Reaction_3', 'Pablo'): {'Bmin': 0, 'Bmax':  80},
        ('Still',     'Separation', 'Pablo'): {'Bmin': 0, 'Bmax': 200}, 
        ('Heater',    'Heating', 'Juan')   : {'Bmin': 0, 'Bmax': 300}, 
        }

TASKS = set([i for (j,i,k) in UNIT_TASKS])
UNITS = set([j for (j,i,k) in UNIT_TASKS])
NAMES = set([k for (j,i,k) in UNIT_TASKS])

# Auxiliar dictionaries
UNITS_DIC = {j: set() for j in UNITS}
for (j,i,k) in UNIT_TASKS:
    UNITS_DIC[j].add(i)

TASKS_DIC = {i: set() for i in TASKS}
for (j,i,k) in UNIT_TASKS:
    TASKS_DIC[i].add(k)


####Looping inside Dictionary
for j in UNITS:
    for i in UNITS_DIC[j]:
        for k in TASKS_DIC[i]:
            UNIT_TASKS[(i,j,k)]['Bmax'] =  2

####Print Dictionary            
for key,value in UNIT_TASKS.items():
    print(key,value)

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