我对Python还是很陌生,所以如果这是一个简单的问题,我深表歉意。但是,我将感谢您的帮助。当我通过函数时,我得到的是无法散列的类型:“ set”,我不确定为什么。
我有一组数据的数据:
listsets = ({'fruit', 'margarine', 'soups', 'bread'}, {'coffee', 'fruit', 'yogurt'},…
我的目标是在每个集合中找到配对项的数量,如下所示:
('fruit', 'bread'): 24, ('fruit', 'margarine'): 78, …
我正在使用组合函数和默认字典,如下所示:
counts = defaultdict(int)
def paircounts (counts, list):
for a, b in combinations(list,2):
counts[(a, b)] +=1
counts[(b, a)] +=1
paircounts(counts, listsets)
错误-无法散列的类型:“设置”
我还尝试在我的列表集(未设置)上使用Frozenset并出现了内存错误(因此我认为我不应该在分配任务时使用它)
注意:在我得到一串文本之前,我先将其转换为字符串列表,然后再转换为集合列表(即我的列表集)。
我也尝试过转换为元组,这也给了我一个内存错误。我不确定是否可能将其转换为错误。我做了以下工作:[tuple(elem) for elem in listsets]
答案 0 :(得分:0)
您可以使用Counter
更有效地解决问题:
from collections import Counter
from itertools import combinations, chain
Counter(chain.from_iterable(combinations(l,2) for l in listsets))
#Counter({('soups', 'fruit'): 1, ('soups', 'bread'): 1,
# ('soups', 'margarine'): 1, ('fruit', 'bread'): 1,
# ('fruit', 'margarine'): 1, ('bread', 'margarine'): 1,
# ('yogurt', 'fruit'): 1, ('yogurt', 'coffee'): 1, ('fruit', 'coffee'): 1})
出于任何实际目的,Counter
的行为类似于dict
。