我有一组项目列表FreqItemsets
,例如:
FreqItemset(items=[u'bbb_1', u'ccc_1', u'ccc_2', u'aaa_1', u'ccc_3'], freq=379)
FreqItemset(items=[u'aaa_1_1', u'ccc_1', u'ccc_2', u'ccc_3'], freq=375)
...
我尝试在每个FreqItemset
找到一个项目从aaa
我知道如何在列表的第一个元素中找到aaa
filtered_result = model.freqItemsets()\
.filter(lambda x: x.items[0].startswith('aaa_')).collect()
问题是如何在aaa
的每个元素中找到FreqItemset
?
在第一行示例中,aaa
字符串位于第四位。
我想到了这样的事情:
filtered_result = model.freqItemsets()\
.filter(lambda x: x.items[0].startswith('aaa_'))
.filter(lambda x: x.items[1].startswith('aaa_'))
.filter(lambda x: x.items[2].startswith('aaa_'))
...
.collect()
是最有效的方式吗?
答案 0 :(得分:1)
由于我没有数据类型FreqItemset
,我只是使用Python的默认数据类型list
来演示一般方法:
list_1 = [u'bbb_1', u'ccc_1', u'ccc_2', u'aaa_1', u'ccc_3']
list_2 = [u'aaa_1_1', u'ccc_1', u'ccc_2', u'ccc_3']
results_1 = [s for s in list_1 if s.startswith('aaa')]
results_2 = [s for s in list_2 if s.startswith('aaa')]
print(results_1)
print(results_2)
由于我使用的是Python 3,看起来您正在使用Python 2,因此您需要将print(something)
更改为print something
。
注意:的
您可以调整这种通用方法,以便所有那些不那么简单的东西,例如迭代列表列表(或者在您的情况下为FreqItemset
)。或者将结果写入包含例如的字典中。不同的频率作为键。
答案 1 :(得分:1)
如果我理解你是正确的,你想要过滤那些仅由某些字符串组成的元素。它似乎是all()
的工作:
itemsets.filter(lambda x: all(i.startswith('aaa_') for i in x.items))
我宁愿提取新功能:
def is_good(itemset):
return all(i.startswith('aaa_') for i in x.items)
itemsets.filter(is_good)