2017-09-11 96 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