Файл процесса Python и возврат определенных элементов - PullRequest
0 голосов
/ 26 ноября 2010

Скажи, что у меня есть диктат, dict - это диктонарное число со значением

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** означает пользователей, за которыми следует этот пользователь, например: Леон следует за Apple, PPy, Jack, Tommy

и у меня есть файл запроса, в котором есть задачи. Нам нужно выполнить задачу и вернуть список имен пользователей (имена пользователей - это ключи в dict, например, «Леон», «Джек», «Томми»), формат этого файла:

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 является начальным именем пользователя (нам нужно поместить его в список, давайте назовем список user_list). Поисковая спецификация имеет 2 шага (в данном случае):

  1. создайте список, в котором есть Леон, назовите этот список L1
  2. следовать говорит, чтобы заменить каждого человека р в L1 людьми, которые следуют за р, тогда мы получим L2
  3. follow-by говорит о замене каждого человека p в L2 людьми, за которыми следует p (люди, за которыми следует p, находятся в следующем списке в профиле пользователя). Тогда мы получим L3

Спецификация фильтра (в этом примере):

  1. для каждого человека p в L3, если имя p содержит «Leon», пользователь остается в списке. Затем мы получаем L4
  2. для каждого человека p в L4, если p следует за Apple, то p сохраняется в списке, мы получаем L5
  3. для каждого человека p в L5, если за p следует Леон, p сохраняется в списке. Тогда мы получаем наш окончательный список. Нам нужно вернуть окончательный список

Может кто-нибудь помочь мне написать программу, которая может выполнить задачу?

1 Ответ

0 голосов
/ 26 ноября 2010

Я бы предложил использовать конечный автомат или, более конкретно, pushdown автоматы .Вы инициализируете машину с помощью dict data, затем для каждой строки входного файла вы перейдете в новое состояние и выполните указанную работу, сохраняя результат в стеке.Каждый шаг может получить доступ к данным, возвращенным с предыдущего шага.

...