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 が 1 つの要素 (文字列) を含むリストであるためです。したがってnewlist[0]、文字列が得られます'<abc> 43242'。適用するnewlist[0][1]と、その文字列の 2 番目の要素、つまり が取得されます'a'

ただし、これはインデックス作成をサポートするオブジェクトに対してのみ機能します。そして、あなたが扱っているオブジェクトはそうではありません。リストに表示されているのは、オブジェクトの文字列表現です。

MasterReleaseと のインスタンスについてはまったくわからないため、これ以上のサポートはできませんがRelease、必要な値を取得するための属性が必要です。

于 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 に答える