在python中从列表解析

2024-10-03 06:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚完成了一些在线教程,我正在试验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的知识还很有限。你知道吗


Tags: 代码nameinforinputifdiscogsartist
3条回答

您看到的是对象的Python表示,而不是字符串。列表中的每个元素都是MasterRelease类的实例。你知道吗

这些对象具有id属性,直接引用该属性即可:

for masterrelease in thereleases:
    print masterrelease.id

其他属性是.versions表示其他发行版,.title表示发行版标题,等等

问题是您正在处理对象并假设它们是字符串。artist.releases是一个包含许多对象的列表。你知道吗

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

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

但这只适用于支持索引的对象。而您正在处理的对象没有。您在列表中看到的是对象的字符串。你知道吗

我真的帮不了你这么多,因为我不知道MasterReleaseRelease实例-但是它们应该有一些属性可以让你得到所需的值。你知道吗

如果您只想筛选MasterRelease,那么下面的代码可能会执行以下操作:

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

假设MasterRelease不在当前范围内。或者你可以:

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

相关问题 更多 >