@bukert

Генератор в список?

Помогите разобраться:
есть словарь
fls_gen = {'05:00PM': 'Freeport',
						'05:55PM': 'Rock Sound',
						'07:00PM': 'West End',
						'09:35AM': 'Freeport',
						'09:55AM': 'West End',
						'10:45AM': 'Treasure Cay',
						'11:45AM': 'Rock Sound',
						'12:00PM': 'Treasure Cay'}


так же есть цикл с генератором:
when = {}
						for dest in set(fls_gen.values()):
							when[dest]=[key for key, value in fls_gen.items() if value == dest]


позволяющий трансформировать словарь fls_gen в словарь:

{'Freeport': ['09:35AM', '05:00PM'],
						 'Rock Sound': ['11:45AM', '05:55PM'],
						 'Treasure Cay': ['10:45AM', '12:00PM'],
						 'West End': ['09:55AM', '07:00PM']}


Вопрос в следующем - если генератор [key for key, value in fls_gen.items() if value == dest] представить в виде цикла for
результат получается не тот, что при использовании генератора:
when = {}
			for dest in set(fls_gen.values()):
				for key, value in fls_gen.items():
					if value == dest:
						when[dest] = [key]
			вернет:
			
			{'Freeport': ['05:00PM'],
			'Rock Sound': ['05:55PM'],
			'Treasure Cay': ['12:00PM'],
			'West End': ['07:00PM']}


В чем ошибка при использовании цикла в цикле вместо генератора ?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@DollaR84
В случае генератора списка, он создает список со всеми значениями из словаря, удовлетворяющих условию.
В случае же вашего развернутого цикла, вы вместо списка со всеми подходящими значениями присваиваете список с одним значением. При повторном нахождении подходящего элемента вы переприсваиваете старое значение новым, а не добавляете в список.
Чтобы цикл был эквивалентен генератору, его надо изменить как-то так:
when = {}
for dest in set(fls_gen.values()):
    key_list = []
    for key, value in fls_gen.items():
        if value == dest:
            key_list.append(key)
    when[dest] = key_list
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы