Как у вас сейчас, вы должны определить evens
раньше, так как вы используете его в двух местах в понимании dict: для итерации индексов и для получения фактического элемента. Как правило, когда вам нужен и индекс, и элемент, вы можете вместо этого использовать enumerate
, возможно с параметром start
, если вы хотите сместить индекс:
even_dict = {i: x for i, x in enumerate(evens, start=1)}
Теперь вам нужно только evens
один раз, и, таким образом, вы можете "встроить" его в понимание слова:
even_dict = {i: x for i, x in enumerate([number for number in range(1,10) if number%2==0], start=1)}
Но вам не нужно понимание этого внутреннего списка вообще; чтобы получить четные числа, вы можете просто использовать range
с параметром step
:
even_dict = {i: x for i, x in enumerate(range(2, 10, 2), start=1)}
И, наконец, в этом конкретном случае вам это даже не понадобится, поскольку вы можете просто умножить ключ на два, чтобы получить значение, как показано в @ olinox's answer .