Вывод словаря по индексу из списка

Имеется такой словарь и список:

groups = {
    "group1" : [
        77, 88, 99
    ],
    "group2" : [
        11, 22, 33, 44, 55, 66
    ],
    "group3" : [
        1, 2, 3, 4, 5
    ]
}
types = [True, False, True]
...
list = []

Как в list записать все значения словаря по индексу, который соответствует значению True из списка types В данном примере должно получиться list = [77, 88, 99, 1, 2, 3, 4, 5] У меня получается пока что только через if-ы реализовать


Ответы (3 шт):

Автор решения: Maxim Chyorny
for _ in range(len(list(groups))):
    IFTRUE = types[_]                       # тут я получаю текущий type, а то есть булево значение
    if IFTRUE == True:                      # проверяю на True
        group_key = list(groups)[_]         # получаю необходимый ключ с groups
        for number in groups[group_key]:    # прохожусь по значениям в словаре groups с текущим ключом
            new_list.append(number)         # добавляю значения 

print(new_list) # OUTPUT: [77, 88, 99, 1, 2, 3, 4, 5]
→ Ссылка
Автор решения: insolor

Если буквально по вопросу:

result = []

for add, value in zip(types, groups.values()):
    if add:
        result += value
# В одну строку:
# result = sum((value for add, value in zip(types, groups.values()) if add), [])

print(result)

Вариант, когда нужные ключи просто перечислены в списке (из комментариев к вопросу):

keys = ['group1', 'group3']

result = []

for key in keys:
    result += groups[key]
# В одну строку:
# result = sum((groups[key] for key in keys), [])

print(result)
→ Ссылка
Автор решения: SergFSM

для этой ситуации еще подходит функция compress из модуля itertools, она создает итератор который фильтрует элементы из первого аргумента, возвращая только те, которым соответствуют значения True из второго аргумента:

from itertools import compress

groups = {"group1" : [77, 88, 99], 
          "group2" : [11, 22, 33, 44, 55, 66], 
          "group3" : [1, 2, 3, 4, 5]}
types = [True, False, True]

print(sum(compress(groups.values(),types),[])) # [77, 88, 99, 1, 2, 3, 4, 5]
→ Ссылка