我需要获取这个json响应的'ids',事实是,里面有很多字典,里面有字典列表,我该怎么做?(PS:len(items)is 20,so我需要以字典的形式获取20个ID。
template<typename T> class Ptr
{
T* p;
public:
Ptr(T* t) : p{t} {}
Ptr(const Ptr& r) {p = r.p;}
template<typename T2>
explicit operator Ptr<T2>();
};
template<class T>
template<class T2>
Ptr<T>::operator Ptr<T2>()
{
return Ptr<T2>{p};
}
class X {};
class Y : public X {};
int main(int argc, char *argv[])
{
Y y;
Ptr<Y> py{&y};
Ptr<X> xp{py};
//Ptr<X> xp2 = py; // no candidate, thought this would work
Ptr<X> x2{xp};
return 0;
}
我正试图通过它来解决这个问题:
{'playlists': {'href': 'https://api.spotify.com/v1/search?query=rewind-The%25&type=playlist&offset=0&limit=20',
'items': [{'collaborative': False,
'description': 'Remember what you listened to in 2010? Rewind and rediscover your favorites.',
'external_urls': {'spotify': 'https://open.spotify.com/playlist/37i9dQZF1DXc6IFF23C9jj'},
'href': 'https://api.spotify.com/v1/playlists/37i9dQZF1DXc6IFF23C9jj',
'id': '37i9dQZF1DXc6IFF23C9jj',
'images': [{'height': None,
'url': 'https://i.scdn.co/image/ab67706f0000000327ba1078080355421d1a49e2',
'width': None}],
'name': 'Rewind - The Sound of 2010',
'owner': {'display_name': 'Spotify',
'external_urls': {'spotify': 'https://open.spotify.com/user/spotify'},
'href': 'https://api.spotify.com/v1/users/spotify',
'id': 'spotify',
'type': 'user',
'uri': 'spotify:user:spotify'},
'primary_color': None,
'public': None,
'snapshot_id': 'MTU5NTUzMTE1OSwwMDAwMDAwMGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0Mjdl',
'tracks': {'href': 'https://api.spotify.com/v1/playlists/37i9dQZF1DXc6IFF23C9jj/tracks',
'total': 100},
'type': 'playlist',
'uri': 'spotify:playlist:37i9dQZF1DXc6IFF23C9jj'},
我收到此错误:
dict={'id':''}
for playlists in playlist_data['playlists']:
for items in playlists['items']:
for item in items:
for dic in range(len(item)):
for id in dic['id']:
dict.update('id')
print(dict)
答案 0 :(得分:2)
尝试这样的事情:
ids = [item["id"] for item in json_data["playlists"]["items"]]
这称为列表理解。
您要遍历"items"
键内的所有"playlists"
。
您可以访问该项目列表:
json_data["playlists"]["items"]
然后遍历项目中的每个项目:
for item in json_data["playlists"]["items"]
然后,您访问每个项目的"id"
:
item["id"]
答案 1 :(得分:2)
您可以使用对象的键为对象编制索引。我可以看到在一个对象中存在id的地方有两个。要检索这两个ID并以字典格式存储它们,可以使用以下方法-
_json = {
'playlists': {
'href': 'https://api.spotify.com/v1/search?query=rewind-The%25&type=playlist&offset=0&limit=20',
'items': [{
'collaborative': False,
'description': 'Remember what you listened to in 2010? Rewind and rediscover your favorites.',
'external_urls': {
'spotify': 'https://open.spotify.com/playlist/37i9dQZF1DXc6IFF23C9jj'
},
'href': 'https://api.spotify.com/v1/playlists/37i9dQZF1DXc6IFF23C9jj',
'id': '37i9dQZF1DXc6IFF23C9jj',
'images': [{
'height': None,
'url': 'https://i.scdn.co/image/ab67706f0000000327ba1078080355421d1a49e2',
'width': None
}],
'name': 'Rewind - The Sound of 2010',
'owner': {
'display_name': 'Spotify',
'external_urls': {
'spotify': 'https://open.spotify.com/user/spotify'
},
'href': 'https://api.spotify.com/v1/users/spotify',
'id': 'spotify',
'type': 'user',
'uri': 'spotify:user:spotify'
},
'primary_color': None,
'public': None,
'snapshot_id': 'MTU5NTUzMTE1OSwwMDAwMDAwMGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0Mjdl',
'tracks': {
'href': 'https://api.spotify.com/v1/playlists/37i9dQZF1DXc6IFF23C9jj/tracks',
'total': 100
},
'type': 'playlist',
'uri': 'spotify:playlist:37i9dQZF1DXc6IFF23C9jj'
}, ]
}
}
res_dict = {'id':[items['id'], items['owner']['id']] for items in _json['playlists']['items']}
print(res_dict)
输出:
{'id': ['37i9dQZF1DXc6IFF23C9jj', 'spotify']}
如果不需要json对象中存在的第二个id,则可以从res_dict上方将其删除,并将其修改为-
res_dict = {'id':items['id'] for items in _json['playlists']['items']}
这只会获取items
数组中存在的ID作为任何元素的键,而不会嵌套任何其他ID(例如items [i]-> owner-> id将不在最终res中,因为”)。