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

そのため、別の辞書 (映画) をループする辞書を作成し、これらの各映画の俳優をキーとして追加しようとしています。私の辞書のキーは俳優の名前で、値は彼が出演した映画の総数になります。ただし、キーエラーが発生しているようです。なぜそれが考えられるのでしょうか?

PS- 各映画には 5 人の俳優が登場するため、ループ用に 5 つのキーを使用しています。

ありがとう、ジュナイド

4

3 に答える 3

3

ここでa を使用する方がはるかに簡単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()
于 2013-11-08T06:45:51.850 に答える
1

おそらくここのどこかでタイプミス:

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

簡単にするためにusedefaultdictまたは 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
于 2013-11-08T06:46:25.527 に答える
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)
于 2013-11-08T07:09:30.643 に答える