首页 > 解决方案 > 字典理解 - 不要生成具有空列表值的键/值对

问题描述

以下代码

k = 7
{ i: [j for j in range(10) if abs(i-j)==k] for i in range(10) }

生成以下值

{0: [7], 1: [8], 2: [9], 3: [], 4: [], 5: [], 6: [], 7: [0], 8: [1], 9: [2]}

有空列表的值。如何生成只有非空值的字典项?

{0: [7], 1: [8], 2: [9], 7: [0], 8: [1], 9: [2]}

标签: python

解决方案


在 Python 3.8+ 中使用赋值表达式(PEP 572) ,它是专门为这种情况设计的(它避免了其他答案中提到的 2 个步骤或 2 个 for 循环):

k = 7
{ i: t for i in range(10) if (t:= [j for j in range(10) if abs(i-j)==k]) }

推荐阅读