0

我刚刚完成了一些在线教程,并且正在尝试使用Discogs Api

我的代码如下:

import discogs_client as discogs

discogs.user_agent = '--' #i removed it 

artist_input = raw_input("Enter artist\'s name : ")
artist = discogs.Artist(artist_input)

if artist._response.status_code in (400, 401, 402, 403, 404):
    print "Sorry, this artist %s does not exist in Discogs database" % (artist_input)
elif artist._response.status_code in (500, 501, 502, 503) :  
    print "Server is a bit sleepy, give it some time, won\'t you ._."
else:
        print "Artist : " + artist.name
        print "Description : " + str(artist.data["profile"])
        print "Members :",
        members = artist.data["members"]
        for index, name in enumerate(members):
            if index == (len(members) - 1):
                print name + "."
            else:    
                print name + ",",

我想使用的列表格式是这样的:

[<MasterRelease "264288">, <MasterRelease "10978">,  <Release "4665127">...

我想用 MasterRelease 隔离那些,所以我可以得到他们的 id

我尝试了类似的东西

for i in artist.releases:
        if i[1:7] in "Master":
            print i

或者

for i in thereleases:
        if i[1:7] == "Master":
       print i

我当然错过了一些东西,但它让我感到困惑,因为我可以做到这一点

newlist = ["<abc> 43242"]
print newlist[0][1]  

在这种情况下

thereleases = artist.releases    
print thereleases[0][1]

我明白了

TypeError: 'MasterRelease' object does not support indexing

随意指出有关代码的任何内容,因为我对 python 的了解还很有限。

4

3 回答 3

1

问题是您正在使用对象并假设它们是字符串。artist.releases是一个包含许多对象的列表。

newlist = ["<abc> 43242"]
print newlist[0][1]

这是有效的,因为 newlist 是一个包含单个元素(字符串)的列表。所以newlist[0]给你一个字符串'<abc> 43242'。应用newlist[0][1]会得到该字符串的第二个元素,即'a'.

但这仅适用于支持索引的对象。而您正在使用的对象则不会。您在列表中看到的是对象的字符串表示形式。

我真的无法为您提供更多帮助,因为我不知道MasterReleaseRelease实例 - 但它们中应该有一些属性可以为您提供所需的值。

于 2013-07-06T10:47:23.487 回答
1

您正在查看对象的 Python 表示,而不是字符串。列表中的每个元素都是该类的一个实例MasterRelease

这些对象都有一个id属性,直接引用属性即可:

for masterrelease in thereleases:
    print masterrelease.id

其他属性.versions用于其他版本、.title版本标题等。

于 2013-07-06T10:51:18.427 回答
0

如果它只是MasterRelease您想要过滤的,那么下面的代码可能会:

[master for master in artist.releases if 'MasterRelease' in str(type(master))]

假设MasterRelease不在当前范围内。否则你可以:

[master for master in artist.releases if isinstance(master, MasterRelease)]

于 2013-07-06T11:12:55.930 回答