Python-创建集列表还是集集?

时间:2018-09-04 21:52:44

标签: python

我正在审核的课程需要家庭作业练习的帮助。该练习是在关联规则挖掘中进行的,我非常困于组织数据的步骤之一。

我有一个由换行符分隔的数据字符串(每行代表客户购买的商品):

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)

这显然行不通。也许我正在以错误的方式进行操作?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

您已经关闭,但是有两个问题:

  • 您没有将每一行中的单个项目拆分为单独的字符串
  • 您实际上并没有为每一行中的项目设置一套

鉴于此,这应该可以解决您的问题

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

答案 2 :(得分: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'}]