2015-04-28 58 views
-1

我想創建列表的字典,其中的鍵是我調用的函數(返回對象)的變量。然後我想創建這些對象的列表。我很難在沒有繁瑣的代碼的情況下實例化列表。有人能告訴我如何更有效地做到這一點嗎?如何在Python中儘可能少的編碼中創建列表的字典?

這裏是我當前的代碼:

def test(xlist): 
    ret = dict() 
    for x in xlist: 
     y = somefunction(x) 
     if y.variable not in ret: 
      ret[y.variable] = [y] 
     else: 
      ret[y.variable].append(y) 

    return ret 
+0

@KarolyHorvath:這是一個相當的指責。你會提供一些支持嗎? –

+0

我猜,因爲它至少包含一個語法錯誤? 'append(y]' – Marein

+0

@KarolyHorvath:如果Marein是正確的,那麼如果你給出理由,你的評論會更有幫助,這給了TheBear一個解決問題的機會。 –

回答

4

你不要;噸插入,以免覆蓋重複的元素之前,需要成員資格檢查。要麼你可以使用dict.setdefault或使用collections.defaultdict

而不是

if y.variable not in ret: 
     ret[y.variable] = [y] 
    else: 
     ret[y.variable].append(y) 

重寫它作爲

ret.setdefault(y.variable,[]).append(y) 

如果你有興趣使用默認的字典,這是你可能會喜歡做

什麼
def test(xlist): 
    from collections import defaultdict 
    ret = defaultdict(list) 
    for x in xlist: 
     y = somefunction(x) 
     ret[y.variable].append(y) 
    return ret