Python 列表理解返回:TypeError:字符串索引必须是整数

Python 列表理解返回:TypeError:字符串索引必须是整数,python,python-3.x,Python,Python 3.x,只是想说明一下我想做什么。 数据集来自data.world/notgibs 我创建了一个名为album的新列表,并尝试使用列表理解来获得1974年发行的专辑数量。这是我的密码: with open ('/Users/Weindependent/Desktop/dataset/albumlist.csv', encoding='cp1252') as case0: reader = csv.DictReader(case0) #the file is coded with single-b

只是想说明一下我想做什么。 数据集来自data.world/notgibs 我创建了一个名为album的新列表,并尝试使用列表理解来获得1974年发行的专辑数量。这是我的密码:

with open ('/Users/Weindependent/Desktop/dataset/albumlist.csv', encoding='cp1252') as case0:
    reader = csv.DictReader(case0) #the file is coded with single-byte coding
    album = []
    for row in reader:
        album.append(row)
print (len(album))
我正在创建一个名为album_1974的新列表 对于我的专辑列表中“年份”为1974年的每一张专辑(行),请附加到名为album_1974的新列表中

album_1974 = [row for row in album if row["Year"]=='1974'] 
print ("Number of albums released in 1974:", len(album_1974))
错误为:TypeError:字符串索引必须是整数

尝试: 我发现year列中有一些非整数值,所以我继续定义is_valid_year:

def is_valid_year(string):
    try:
        year = int(string)
    except:
        return TypeError
    else:
        return year
并将其放回我以前的脚本:

album_1974 = [row for row in album if is_valid_year(row["Year"]=="1974")] #this is list comprehension 
print ("No of album in 1974 released:",len(album_1974))
错误仍然存在

然后,我尝试使用排序功能按年份对列表中的相册进行排序,出现相同的错误: 我的代码:

album_sort = sorted(album,lambda = x : s["Artist"]
print (Album_sort)
相同错误:TypeError:字符串索引必须是整数


有人能帮忙吗?

您需要提供数据集的结构来解决问题。在不知道数据类型的情况下,很难判断到底是什么导致了问题。目前看来,
不是一个字典,而是一个列表。你所说的数据结构是什么意思?结构意味着如果它是一个列表列表,字典列表,包含列表的字典,包含字典的字典等等。。如果
行=[1,2,3,4]
行[“年”]
将失败。如果
行={“年”:“1974”}
,则
行[“年”]
将起作用。但是,由于我们不知道相册的样子,我们也不知道行是什么,所以我们也不知道行[“年”]是否存在。这是专辑的样子:[订购的唱片([('Number','1'),('Year','1967'),('album','sagt.Pepper's Lonely Hearts Club Band'),('Artist','披头士'),('Genre','Rock'),('Subgenre','Rock&Roll,迷幻摇滚')]请不要评论要求额外信息或澄清的评论:编辑您的帖子。
这是相册的样子:[OrderedDict](
应该直接进入你的问题。
计算出年份列中有一些非整数值
计算出相册中有一些非dict值,尤其是字符串。你需要提供数据集的结构来解决问题。如果不知道数据类型,很难准确地说出c是什么因为这个问题。目前看来,
row
不是一个字典,而是一个列表。你所说的数据结构是什么意思?结构意味着如果它是一个列表列表,一个字典列表,一个包含列表的字典,一个包含字典的字典等等。如果
row=[1,2,3,4]
那么
row[“Year”]
将失败。如果
row={“年:'1974'}
,那么
行[“年”]
就行了。但是由于我们不知道
专辑的样子,我们不知道
行是什么,所以我们不知道
行[“年”]
是否存在,谢谢你的澄清。这就是专辑的样子:[OrderedDict([('Number','1'),('Year','1967'),('album',”佩珀中士的“孤独之心俱乐部乐队”)、(“艺术家”、“披头士”)、(“流派”、“摇滚”)、(“亚流派”、“摇滚乐、迷幻摇滚”)请不要评论要求更多信息或澄清的评论:编辑您的帖子。
这是专辑的样子:[OrderedDict](
应该直接进入您的问题。
计算出年份列中有一些非整数值
计算出相册中有一些非dict值,特别是至少在字符串上。