Понимание словаря для создания словаря четных чисел - PullRequest
0 голосов
/ 13 мая 2019

Я хочу создать словарь четных чисел с ключами, являющимися последовательными целыми числами, используя словарное понимание

Выходные данные должны быть:

{1:2,2:4,3:6,4:8}

Я использовал 2строки кода, т. е. одна строка - это понимание списка для получения четных чисел, а вторая - понимание словаря для получения желаемого результата.

Я использовал следующий код:

evens=[number for number in range(1,10) if number%2==0]
even_dict={k:evens[k-1] for k in range(1,len(evens)+1)}

Мой вопрос вместо того, чтобы использовать 2 строки кода, можем ли мы использовать одну строку кода, которая включает только словарное понимание для получения желаемого результата?

Ответы [ 2 ]

1 голос
/ 13 мая 2019

В зависимости от того, что вы хотите, вы можете просто сделать:

d = {x: 2*x for x in range(1, 5)}
0 голосов
/ 13 мая 2019

Как у вас сейчас, вы должны определить 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 .

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