2014-01-22 36 views
2

三元操作符是非常有用的,它爲什麼不以這種特殊情況下工作:Python的三元運算符和分配中的其他

c="d" 
d={} 
d[c]+=1 if c in d else d[c]=1 

它提供:

d[c]+=1 if c in d else d[c]=1 
         ^
SyntaxError: invalid syntax 

我看不出有什麼錯這裏因爲沒有三元運算符的同樣的東西可以工作:

c="d" 
d={} 
if c in d: 
    d[c]+=1 
else: 
    d[c]=1 
+0

對於這種情況,使用defaultdict。 '從集合導入defaultdict; d = defaultdict(int); d [c] + = 1'。 – RemcoGerlich

+0

@RemcoGerlich:當你可以使用'Counter'時,爲什麼要用'defaultdict'來模擬'Counter'? – abarnert

+0

@abarnert:習慣的力量?我總是首先記住'defaultdict',因爲它在'Counter'之前,因爲它更通用。 – user2357112

回答

11

三元運算符對錶達式,而不是陳述。作業是一個聲明。使用常規的if/else

+3

或使用'defaultdict'和'd [c] + = 1'。或者'd [c] = d.get(c,0)+ 1'。 – Blender

+2

@Blender:不要使用'defaultdict(int)'來模擬'Counter'。只需要使用'Counter'即可。 – abarnert

+0

@abarnert:哦,對。我忘了所有關於「計數器」的信息。 – Blender

2

正確的方式來寫,這將是:

d[c] = (d[c] + 1) if c in d else 1 
+0

我認爲Blender的'd.get(c,0)'更清晰(並且避免了查找'c'兩次),但是這種方法有效,如果OP能夠理解它,那就很好。 – abarnert