错误“ int”对象不可下标,如何将其转换为列表?

问题描述

我是python新手,还在学习, 我有以下代码

# columns are [0]title [1]year [2]rating [3]length(min) [4]genre [5]budget($mil) [6]Box_office_gross($mil)
oscar_data = [
    ["The Shape of Water",2017,6.914,123,['sci-fi','drama'],19.4,195.243464],["Moonlight",2016,6.151,110,['drama'],1.5,65.046687],["Spotlight",2015,7.489,129,['drama','crime','history'],20.0,88.346473],["Birdman",2014,7.604,119,'comedy'],18.0,103.215094]
]


def filter_by_genre(data,genre):
    result = []
    for row in data:
        genres = row[4]
        if genre in genres:
            result.append(row)
    return result


all_genres = [
    'sci-fi','drama','history','comedy','biography','thriller','war','melodrama','action','adventure','western','mystery','horror'
]

genres_counts = []
for genre in all_genres:
    count = len(filter_by_genre(oscar_data,genre))
    genres_counts.append(genre)
    genres_counts.append(count)



print('Genre        | Number')
print('------------------------')
for row in genres_counts:
    genre = row[0]
    count = row[1]
    print('{: <11} | {: >10}'.format(genre,count))

为便于发布,我将列表缩短了,它应该计算oscar_data中的每个流派,并打印出该流派和流派。

我以为我做对了,但由于它返回错误,所以无法打印

  File "temp.py",line 63,in <module>
    genre = row[0]

TypeError: 'int' object is not subscriptable

我应该怎么做才能使该int成为列表?

谢谢!

解决方法

您的错误在这里介绍:

genres_counts.append(genre)
genres_counts.append(count)

您将流派和计数附加为单独的值,而不是集合。将这两行替换为:

genres_counts.append((genre,count))

更好的是,使用列表理解:

genres_counts = [(genre,len(filter_by_genre(oscar_data,genre))  
                 for genre in all_genres]