0
dlist=['All my loving','All my bros','And all sis'] 

工作的字典,我想創造這樣,所有的詞(如鑰匙)被分配一個值,該值的DLIST的指數,其中詞出現的字典。 例如, '所有':{0,1}, '我':{0,1}, '姐姐'= {2}等的if-else理解與不python3

不知怎的,這並不工作:

dict={} 
{w:{num} if w not in dict.keys() else dict[w].add(num) for (num,strn) in enumerate(dlist) for w in strn.split()} 

This returns

{'All':{2}, 'my':{2}} 

看起來像else語句被忽略。任何指針? 謝謝

+0

一旦你有兩個'for'循環,並在一個字典理解一個'if'聲明,考慮將其分成幾行。 – Blender

+0

你通過不給它指定一個名字來拋棄你的詞典理解的結果,*和*你正在改變你現有的詞典作爲理解的一部分。最重要的是,你有*名*變量'dict',這本身就令人困惑。就好像你已經*嘗試*以儘可能最鈍的方式寫下它。使用更好的變量名稱,不要嘗試將它全部寫入一行。 – kindall

回答

1

這不起作用,因爲您正在嘗試訪問dict.keys,而您正在dict理解中創建字典。如果這是在for循環中,dict.keys會更新每個元素,但是dict comprehensions確保dict不會在創建中更新以提高速度。

像這樣的東西應該工作:

myDict = {} 
for (num, strn) in enumerate(dlist): 
    for w in strn.split(): 
     if w not in myDict: 
      myDict[w] = {num} 
     else: 
      myDict[w].add(num) 
+0

感謝RiaD和Jmac。我有一個類似於Jmac給出的代碼,但是試圖查看是否可以使用dict理解。我不明白爲什麼它不能通過在一行理解中重寫上述代碼來工作。感謝Jmac,我現在很清楚 - 試圖在孵化之前將雞出爐! – gujax

+0

重命名'dict'。它影響了內建的「詞典」。 – Blender