Python条件字典理解

jkm*_*acc 1 python dictionary list-comprehension

这个列表comp有效的原因是:

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)]
Run Code Online (Sandbox Code Playgroud)

但这个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
Run Code Online (Sandbox Code Playgroud)

我在找:

{0: 100, 1: 1, 2: 5, 3: 3, 4: 4}
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用dict comp而不是dict(list comp).

提前致谢!

Sve*_*ach 10

你不能重复这个钥匙.字典理解具有形式

{k: v for ...}
Run Code Online (Sandbox Code Playgroud)

在哪里kv是表达.这些表达式中的一个(或两个)可以是条件表达式,它将给出

{dpidx:d[dpidx] if dpidx in d else dpidx for dpidx in range(N)}
Run Code Online (Sandbox Code Playgroud)

k: v它本身并不是一种表达方式.

写这个的更简单的方法是

{dpidx:d.get(dpidx, dpidx) for dpidx in range(N)}
Run Code Online (Sandbox Code Playgroud)

  • 当然,在这种特殊情况下,您可以将其写为`{dpidx:d.get(dpidx,dpidx),用于范围(N)中的dpidx} (2认同)