【问题标题】:Parsing from a list in python从python中的列表解析
【发布时间】:2013-07-04 07:46:21
【问题描述】:

我刚刚完成了一些在线教程,我正在尝试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 的了解还很有限。

【问题讨论】:

    标签: python list api indexing discogs-api


    【解决方案1】:

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

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

    这是有效的,因为 newlist 是一个包含单个元素的列表,一个字符串。所以newlist[0] 给你一个字符串'&lt;abc&gt; 43242'。应用newlist[0][1] 可以获得该字符串的第二个元素,即'a'

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

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

    【讨论】:

      【解决方案2】:

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

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

      for masterrelease in thereleases:
          print masterrelease.id
      

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

      【讨论】:

      • 非常感谢。 .title 解决了,所以我会尝试更好地阅读文档。
      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多