2011-11-29 21 views
0
def parse_actor_data(actor_data): 
    while 1: 
     line = actor_data.readline().strip() 
     if line.count('-') > 5: 
      break 
    actor_movie = {} 
    values = [] 
    actor_name = '' 
    running_list = [] 
    movie = [] 
    for line in actor_data: 
     position = line.find(')') 
     running = line[:position + 1] 
     value = running.split('\t') 
     for k in value: 
      if k != '': 
       running_list.append(k) 
     actor_name_list = value[0].split(',') 
     actor_name = actor_name_list[0] + actor_name_list[-1] 
     for i in range(len(running_list)): 
      if value[0] == running_list[i]: 
       position2 = i 
     movie = running_list[position2+1:] 
     actor_movie[actor_name] = movie 
     check = actor_movie.keys() 
    for c in range(len(check)): 
     if len(check[c]) < 1: 
      actor_movie.pop(check[c]) 
    return actor_movie 

问题现在我只有电影的第一项被添加到actor_movie任何人都可以帮忙吗?我试过这么久这个我已经认真不知道为什么没有这方面的工作......将演员和他们的电影映射到字典

+2

您正在解析的数据样本将会有所帮助。 – Acorn

+0

您需要一些调试打印。在设置之后立即打印actor_name。如果actor_movie只有一个项目,那么您只需要经过for循环一次,或者每次迭代都将actor_name保持为相同的值 – TJD

回答

1

你每次运行:

actor_movie[actor_name] = movie 

你覆盖,将其与该演员相关的最后一部电影。尝试这样的事情,而不是在那里你存储电影列表,而不是一个单一的值:

try: 
    actor_movie[actor_name].append(movie) 
except KeyError: 
    actor_movie[actor_name] = [movie] 

还有其他的方法(defaultdictdict.setdefault等)做同样的事情,而是应该让你启动并运行。