2010-11-25 51 views
0

说我有一个字典,字典是dictonary一个dictonary作为值的Python程序文件,并返回特定项目

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**意味着,其次是该用户的用户,例如: 莱昂如下苹果,聚吡咯,杰克,汤米

和我有查询文件,其中有任务。我们需要完成的任务,并返回一个用户名列表(用户名是在字典的按键,如“莱昂”,“杰克”,“汤米”),该文件的格式是:

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. 后续说,以取代在L1每一者P的人谁如下P,那么我们得到L2
  3. follow-by说将L2中的每个人p替换为后面跟随p的人(p后面的人在用户简档的后续列表中)。然后,我们获得L3

过滤器规格(在这个例子中):

  1. 在L3每个人P,如果P的名称有“莱昂”在里面,用户保持在列表中。然后我们得到L4中每个人p的L4
  2. ,如果p跟随Apple,则p保持在列表中,对于L5中的每个人p,如果p跟随Leon,则p保持为L5
  3. 在列表中。然后我们得到我们的最终名单。我们需要返回最终列表

任何人都可以帮我写一个能完成任务的程序吗?

+5

如果您向我们展示您迄今为止的内容或告诉我们您卡住了什么,那将会很好。我们不在这里为你做你的工作。 – GWW 2010-11-26 01:17:47

回答

0

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