Вывод словаря по индексу из списка
Имеется такой словарь и список:
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]