0

说我有一个字典,字典是一个字典,以字典为值

dict = {'**Leon**':{'Name':'Leon L','**follow**':['Apple', 'PPy','Jack','Tommy']},'**Jack**':{'name':'Jack Y','**follow**':['Apple','Cruise','Jay']},'**Tommy**':{'name':'Tommy T','**follow**':['Hill']},'**Apple**':{'name':'Apple A','**follow**':['Jack']},**'Cruise'**:{'name':'Cruise L','**follow**':['Jay']}}

**follow**表示该用户关注的用户,例如:Leon follow Apple, PPy,Jack,Tommy

我有其中包含任务的查询文件。我们需要完成任务并返回一个用户名列表(用户名是dict中的键,例如'Leon','Jack','Tommy'),该文件的格式是:

SEARCH
Leon
follow
follow-by # there might be many more follow, and follow-by
FILTER
name-include Leon
follow Apple # format: keyword follow, a space and a username. same apply to follow-by username
follow-by Leon # there might be more name-include, , follow username, follow by username

查询文件的含义: SEARCH 和 FILTER 是关键字。SEARCH 之后的行是起始用户名(我们需要将其放入列表中,我们将列表命名为 user_list)。搜索规范有 2 个步骤(在这种情况下):

  1. 创建一个包含 Leon 的列表,将此列表称为 L1
  2. follow 表示将 L1 中的每个人 p 替换为关注 p 的人,然后我们得到 L2
  3. follow-by 表示将 L2 中的每个人 p 替换为 p 关注的人(p 关注的人在用户配置文件的关注列表中)。然后我们得到L3

过滤器规范(在本例中):

  1. 对于 L3 中的每个人 p,如果 p 的名字中包含“Leon”,则该用户保留在列表中。然后我们得到 L4
  2. 对于 L4 中的每个人 p,如果 p 跟随 Apple,则 p 保留在列表中,我们得到 L5
  3. 对于 L5 中的每个人 p,如果 p 后面跟着 Leon,则 p 保留在列表中。然后我们得到我们的最终名单。我们需要返回最终列表

谁能帮我写一个可以完成任务的程序?

4

1 回答 1

0

我建议使用状态机,或者更具体地说是下推自动机。您将使用数据字典初始化机器,然后对于输入文件中的每一行,您将转换到一个新状态并执行指定的工作,并将结果存储在堆栈中。每一步都可以访问上一步返回的数据。

于 2010-11-26T07:39:46.343 回答