我尝试编写一个函数来将循环结果添加到集合中,基本上采用一个列表并使用set()取出列表中字符串中的任何重复字母。
然而;每当我运行代码时,我都会遇到一个错误,说明.add不是dict的定义。
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 = ["苹果","香蕉","胡萝卜"]来运行我的功能I&#39 ;已创建以返回新列表[{' a',''' l',' e'' s'},{' b'' a'' n''}等等。]
答案 0 :(得分:2)
您似乎想要list
代替sets
。怎么样:
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
stmt创建一个地图(又名dict
离子)。对比:
>>> dis.dis("set()")
1 0 LOAD_NAME 0 (set)
3 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
6 RETURN_VALUE