Понимание словаря с помощью лямбды возвращает адреса памяти как значения - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь использовать лямбда-выражения в словарном понимании, как это:

d = {k: lambda v, k = k : v == True if not (i%2) else "Not True" for k in range(1,11)}

Однако, выходы немного странные:

{1: <function <dictcomp>.<lambda> at 0x7fe5b714f510>, 
2: <function <dictcomp>.<lambda> at 0x7fe5b714f488>, (...)}

Если я сделаю это;

v = lambda k: True if not (k%2) else "Not True"

d_1 = {k : v(k) for k in range(1,11)}

производит (желаемый) вывод:

{1: 'Not True', 2: True, 3: 'Not True', 4: True, 5: 'Not True', 6: True, 7: 'Not True', 8: True, 9: 'Not True', 10: True}

если I print(v) без (), вывод очень похож на предыдущие значения словаря:

 <function <lambda> at 0x7fe5b7136e18>.

Я думаю, что мне не хватает вызова лямбда-функции, но это тоже не работает:

d = {k: lambda v, k = k : v(k) == True if not (i%2) else False for k in range(1,11)}

Как я могу сделать вызов лямбда-функции в понимании?

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, что вы ищете следующее

d = {k: (lambda k: True if not (k%2) else "Not True")(k) for k in range(1,11)}

Однако, на мой взгляд, код выглядит супер нечитаемым.Я бы просто использовал понимание списка, чтобы отфильтровать четные и нечетные числа, если вы в конечном итоге пытаетесь это сделать.А так как ваш нужный словарь имеет индексы в качестве ключей, список должен быть просто прекрасен для всего, что вы пытаетесь сделать.Если вам действительно нужно, чтобы это был диктат, вы можете легко превратить этот отфильтрованный список в диктовку

_d = [True if not (k%2) else "Not True" for k in range(1,11)]
d = dict(zip(range(1,11), _d))

Надеюсь, это поможет

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