2017-09-19 63 views
-1

我想使用詞典理解語法創建詞典。使用條件語法從列表創建詞典理解

請注意,列表l包含字符串和元組的元組,其中第一個元素始終爲時間戳。

這工作:

d = {} 
for entry in l: 
    if entry[0] not in d: 
     d[entry[0]] = [] 
    d[entry[0]].append(entry) 

這不起作用:

d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l} 
    File "<stdin>", line 1 
    d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l} 
               ^
SyntaxError: invalid syntax 
+0

這是一個非常棘手的問題,因爲即使你把它變成了一個語法上有效的形式,你也不能在創建d的語句中執行'k [0],因爲d還不存在。 – Kevin

回答

3

不能使用字典理解這一點。對於每個迭代步驟(如果不進行過濾),會生成一個新的鍵值對。這意味着您無法更新另一個已經生成的鍵值對

只要堅持循環。你可以用dict.setdefault()簡化它:

d = {} 
for entry in l: 
    d.setdefault(entry[0], []).append(entry) 

注意d在你的榜樣將不會存在,直到字典解析已完成;只有那麼d綁定到結果。更具體地說,解決了語法錯誤,Python將:之前的部分視爲一個單獨的表達式來生成鍵 - 值對中的鍵,並且其中的for ... in ...語法被解析爲生成器表達式(一種理解語法形式);您可以在這樣的表達式中使用if進行過濾,但在理解中沒有可能的else部分,因此在那裏指向else的錯誤。