2017-09-11 117 views
0

我試圖編寫一個函數來將循環的結果添加到集合中,基本上採用列表並使用set()來取出任何重複的字母列表中的字符串。將字符串列表轉換爲集列表時出現AttributeError

但是;每當我運行代碼,我碰到一個錯誤,說.add不是一個字典定義。

def make_itemsets(L): 
    item_set = {} 
    for item in L: 
     item_set.add(set(item)) 
     return item_set 


     2  item_set = {} 
     3  for item in L: 
----> 4   item_set.add(set(item)) 
     5   return item_set 
     6 

AttributeError: 'dict' object has no attribute 'add' 

任何想法?我基本上試圖得到這個列表(L = [「蘋果」,「香蕉」,「胡蘿蔔」)來運行我創建的函數以返回一個新列表[{'a','p',' '','','s'},{'b','a','n','s'}等等]

+0

如果您的問題得到了充分解答,您可以[接受](https://stackoverflow.com/help/someone-answers)一個答案。謝謝。 –

回答

2

好像你想要一個listsets來代替。約:

def make_itemsets(L): 
    items = [] 
    for item in L: 
     items.append(set(item)) 

    return items 

注意循環外return語句中使用列表理解一個較短的版本將帶來:

def make_itemsets(L): 
    return [set(item) for item in L] 

或者更短的版本使用一個map

def make_itemsets(L): 
    return list(map(set, L)) 

如果你在python2您可以刪除list(...)。調用這些功能中的任何一個返回:

>>> s = make_itemsets(["apples","bananas","carrot"]) 
>>> s 
[{'a', 'e', 'l', 'p', 's'}, {'a', 'b', 'n', 's'}, {'a', 'c', 'o', 'r', 't'}] 

僅供參考,如果你想創建一個空集,你需要

item_set = set() 

{}發生創建一個空dict 。看看反彙編的字節碼:

>>> dis.dis("{}") 
    1   0 BUILD_MAP    0 
       3 RETURN_VALUE 

0 BUILD_MAP語句創建一個地圖(又名dict ionary)。對比:

>>> dis.dis("set()") 
    1   0 LOAD_NAME    0 (set) 
       3 CALL_FUNCTION   0 (0 positional, 0 keyword pair) 
       6 RETURN_VALUE