猿问

如何遍历嵌套的字典列表?

我需要得到这个 json 响应的“ids”,问题是,有很多字典里面有一个字典列表,我该怎么做??(PS:len(items)是 20,所以我需要以字典的形式获取 20 个 id。


{'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)

我收到此错误:


TypeError: string indices must be integers ```


哆啦的时光机
浏览 161回答 2
2回答

ibeautiful

尝试这样的事情: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"]

交互式爱情

您可以使用对象的键索引对象。我可以看到对象中有两个地方存在 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 不会像第一个案例那样出现在最终资源中)。
随时随地看视频慕课网APP

相关分类

Python
我要回答