Python条件词典理解

Python条件词典理解,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,此列表组件工作的原因是: 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[dp

此列表组件工作的原因是:

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}
我想我可以用口述作文代替口述作文


提前谢谢

您不能重复该键。词典的理解有以下形式

{k: v for ...}
其中k和v是表达式。这些表达式中的一个或两个可以是条件表达式,这将

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

不能重复该键。词典的理解有以下形式

{k: v for ...}
其中k和v是表达式。这些表达式中的一个或两个可以是条件表达式,这将

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

您需要将dpidx:dpidx更改为仅dpidx

记住d[dpidx]如果d else中的dpidx表示字典中的值,如果存在,则表示dpidx的值,否则表示dpidx的值没有意义

d={1:2,3:5}
N=5

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

print g
>>>
{0: 0, 1: 2, 2: 2, 3: 5, 4: 4}

您需要将dpidx:dpidx更改为仅dpidx

记住d[dpidx]如果d else中的dpidx表示字典中的值,如果存在,则表示dpidx的值,否则表示dpidx的值没有意义

d={1:2,3:5}
N=5

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

print g
>>>
{0: 0, 1: 2, 2: 2, 3: 5, 4: 4}

我不确定字典理解是一件事……为什么不{dpidx:d.getdpidx,dpidx for dpidx in range}?字典理解在Python 3.x和2.7中是新的。请注意,您可以通过执行dict dpidx,d[dpidx]将您的第一个列表压缩到dict中,如果dpidx在d else dpidx中,dpidx对于rangeN中的dpidx就是这样,我问:为什么添加dict comp语法?@Dan D。因为它更简洁,可以在本机代码中实现。另外,因为不需要创建惰性生成器,这将意味着管理其状态的一些开销。最后但并非最不重要的一点是,创建最基本的内置集合类型、列表和dict需要同样强大的结构。我不确定字典理解是一件事……为什么不{dpidx:d.getdpidx,dpidx for dpidx in range}?字典理解在Python 3.x和2.7中是新的。请注意,您可以通过执行dict dpidx,d[dpidx]将您的第一个列表comp生成一个dict,如果dpidx在d中,那么dpidx,dpidx对于dpidx在range中是这样的,那么我会问:为什么添加dict comp语法?@Dan d。因为它更简洁,并且可以在本机代码中实现。另外,因为不需要创建惰性生成器,这将意味着管理其状态的一些开销。最后但并非最不重要的一点是,创建最基本的内置集合类型、列表和dict的构造同样强大{dpidx:d.getdpidx,dpidx用于范围内的dpidx}