为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2023-03-30 10:32:42
我需要得到这个 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 ```
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

尝试这样的事情:

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"]



查看完整回答
反对 回复 2023-03-30
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信