【发布时间】:2012-02-20 23:57:32
【问题描述】:
此列表组合起作用是否有原因:
N = 5
d = {0:100, 2:5}
[(dpidx,d[dpidx]) if dpidx in d else (dpidx,dpidx) for dpidx in range(N)]
[(0, 100), (1, 1), (2, 5), (3, 3), (4, 4)]
但是这个 dict comp 不起作用? :
{dpidx:d[dpidx] if dpidx in d else dpidx:dpidx for dpidx in range(N)}
{dpidx:d[dpidx] if dpidx in d else dpidx:dpidx for dpidx in range(N)}
^
SyntaxError: invalid syntax
我正在寻找:
{0: 100, 1: 1, 2: 5, 3: 3, 4: 4}
我认为我可以只使用 dict comp 而不是 dict(list comp)。
提前致谢!
【问题讨论】:
-
我不确定“字典”理解是不是一件事......
-
为什么不
{dpidx:d.get(dpidx,dpidx) for dpidx in range(N)}? -
字典推导是 Python 3.x 和 2.7 中的新功能。
-
请注意,您可以通过
dict( (dpidx,d[dpidx]) if dpidx in d else (dpidx,dpidx) for dpidx in range(N) )将您的第一个列表 comp 变成一个 dict,因为这是我的问题:为什么要添加 dict comp 语法? -
@Dan D. 因为它更简洁,可以在本机代码中实现。也因为不需要创建惰性生成器,这意味着管理它的状态会产生一些开销。最后但并非最不重要的一点是,随之而来的是拥有同样强大的构造来创建最基本的内置集合类型、列表和字典。
标签: python dictionary list-comprehension