Python - 创建一个包含集合的列表或集合的集合?

3
需要帮助解决我在一门课程中遇到的一个作业练习。这个练习涉及到关联规则挖掘,而我在组织数据的某个步骤上非常卡住了。
我有一串由换行符分隔的数据字符串(每行代表一个顾客购买的商品)。
rawText = 
"""fruit, bread, butter, soup
   fruit, yogurt, coffee
   whole milk, cream cheese, meat, vegetables"""

我该如何将这些数据转换成以下这种形式的集合(这是一个集合列表吗?):
[{‘fruit’, ‘bread’, ‘butter’, soup’},
 {‘fruit’, ‘yogurt’, ‘coffee’},
 {'whole milk', 'cream cheese', 'meat', 'vegetables'}
]

我已经尝试按行结束符拆分该字符串:
names_list = [y for y in (x.strip() for x in rawText.splitlines()) if y]
my_set = set()
for i in names_list:
    my_set.add(i)

这显然不起作用。也许我走错了路?

如果两行相同,您是否可以接受删除该事实?集合不包含重复项。 - Denziloe
如果其中一個回答解決了您的問題,請接受它作為答案。 - natonomo
3个回答

7

获取一个集合列表,每个集合包含给定行中逗号分隔的单词:

names_list = [set(line.strip().split(', ')) for line in raw_text.splitlines()]

0

你离正确已经很接近了,但还有两个问题:

  • 你没有将每一行的单独项目分开成独立的字符串
  • 你并没有为每一行的项目实际创建一个集合

考虑到上述问题,以下代码应该解决你的难题

names_list = [set(line.strip().split(',')) for line in raw_text.splitlines()]

0
作为替代方案,您可以使用 csv 模块来处理行拆分、空格和分隔符:
import csv
from io import StringIO

x = StringIO("""fruit, bread, butter, soup
fruit, yogurt, coffee
whole milk, cream cheese, meat, vegetables""")

with x as fin:
    reader = csv.reader(fin, skipinitialspace=True)
    res = list(map(set, reader))

结果

print(res)

[{'bread', 'butter', 'fruit', 'soup'},
 {'coffee', 'fruit', 'yogurt'},
 {'cream cheese', 'meat', 'vegetables', 'whole milk'}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接