字典的关键错误

时间:2013-11-08 06:38:35

标签: python dictionary keyerror

我的字典出现了一些关键错误的问题。

    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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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)