2013-11-08 3 views
1

У меня возникли проблемы с ключевыми ошибками в моем словаре.Ключ-ошибка в словаре

result={}  
    for (k,v) in movies.items(): 
     if not v[1] in result: 
      result[v[0]]=0 
     result[v[0]]+=int(1) 
     if not v[2] in result: 
      result[v[2]]=0 
     result[v[2]]+=int(1) 
     if not v[3] in result: 
      result[v[3]]=0 
     result[v[3]]+=int(1) 
     if not v[4] in result: 
      result[v[4]]=0 
     result[v[4]]+=int(1) 
     if not v[5] in result: 
      result[v[5]]=0 
     result[v[5]]+=int(1) 
    list5= sorted(result.items(),key=operator.itemgetter(1),reverse=True) 
    print list5 

Так что я пытаюсь создать словарь, где я цикл через другой словарь (фильмы), а также добавить актер в каждом из этих фильмов, как мои ключи. Ключи в моем словаре - это имена актеров, и значение будет количеством фильмов, которые он сделал в целом. Однако, похоже, я получаю ключевую ошибку. Любая идея, почему это может быть?

P.S- В каждом фильме есть 5 актеров, поэтому у меня есть 5 клавиш для цикла.

Спасибо, Junaid

+0

Пожалуйста, покажите полное сообщение об ошибке. – BrenBarn

+2

1 уже есть 'int'. 'int (1)' избыточно, и он также избыточен. – roippi

ответ

3

Намного проще просто использовать Counter здесь. В качестве бонуса больше не имеет значения, сколько актеров у фильма.

from collections import Counter 
c = Counter(i for v in movies.values() for i in v) 
print c.most_common() 

Другой способ цикла по актерам является использование chain.from_iterable

from itertools import chain 
c = Counter(chain.from_iterable(movies.values())) 
print c.most_common() 
1

вероятно опечатка где-то здесь:

if not v[1] in result: 
    result[v[0]]=0 
result[v[0]]+=int(1) 

использовать defaultdict или SetDefault для простоты, и перебрать кусочек для Объединение:

import collections 
result = collections.defaultdict(int) 
for k, values in movies.items(): 
    for value in values[:6]: # first 6, from 0th to 5th 
     result[v] += 1 
1

Я думаю, этого вам будет достаточно.

result = {} 

for movie, actor_list in movies.iteritems(): 
    for actor in actor_list: 
     result[actor] = result.get(actor, 0) + 1 

print sorted(result.items(), key=operator.itemgetter(1), reverse=True) 
Смежные вопросы