2010-11-25 6 views
0

que j'ai un dict, dict est un dictonary avec dictonary en tant que valeurfichier de processus Python et de retour des éléments spécifiques

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** signifie que les utilisateurs qui ont suivi par cet utilisateur, par exemple: Leon suit Apple, PPy , Jack, Tommy

et j'ai un fichier de requête qui contient des tâches. Nous devons accomplir la tâche et retourner une liste de noms d'utilisateurs (les noms d'utilisateur sont les clés de dict, par exemple « Leon », « Jack », « Tommy »), le format de ce fichier est:

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 

la signification du fichier de requête: La recherche et le filtre sont des mots-clés. La ligne après SEARCH est le nom d'utilisateur de départ (nous devons le mettre dans la liste, nommons la liste user_list). La spécification de recherche a les 2 étapes (dans ce cas):

  1. créer une liste qui a Leon, appelez cette liste L1
  2. suite dit de remplacer chaque personne p en L1 avec des gens qui suit p, alors nous obtenons L2
  3. suivi dit de remplacer chaque personne p dans L2 par des personnes suivies par p (les personnes suivies par p sont dans la liste suivante du profil de l'utilisateur). Ensuite, nous obtenons L3

La spécification du filtre (dans cet exemple):

  1. pour chaque personne p dans L3, si le nom de p a « Leon » en elle, l'utilisateur est conservé dans la liste. On obtient alors L4
  2. pour chaque personne p en L4, si p suit Apple, alors p est conservé dans la liste, on obtient L5
  3. pour chaque personne p en L5, si p est suivi de Leon, p est conservé dans la liste. Ensuite, nous obtenons notre liste finale. Nous devons retourner la liste finale

Quelqu'un peut-il m'aider à écrire un programme qui peut accomplir la tâche?

+5

Ce serait bien si vous nous avez montré ce que vous aviez jusqu'ici ou dites-nous ce que vous êtes coincé. Nous ne sommes pas ici pour faire votre travail pour vous. – GWW

Répondre

0

Je suggère d'utiliser une machine d'état, ou plus précisément pushdown automata. Vous devez initialiser la machine avec les données dict, puis pour chaque ligne dans le fichier d'entrée, vous allez passer à un nouvel état et faire le travail spécifié, en stockant le résultat dans la pile. Chaque étape peut accéder aux données renvoyées à l'étape précédente.

Questions connexes