此列表组合有效的原因是什么:

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)]


但是这个字典补偿不起作用吗? :

{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)。

提前致谢!

最佳答案

您无法重复输入密钥。字典理解具有以下形式

{k: v for ...}


其中kv是表达式。这些表达式中的一个(或两个)可以是条件表达式,

{dpidx:d[dpidx] if dpidx in d else dpidx for dpidx in range(N)}


但是k: v本身并不是一个表达式。

一个更简单的方法是

{dpidx:d.get(dpidx, dpidx) for dpidx in range(N)}

关于python - Python条件字典理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9370246/

10-12 20:22