Python 如何迭代嵌套字典列表?

Python 如何迭代嵌套字典列表?,python,json,dictionary,Python,Json,Dictionary,我需要得到这个json响应的“ID”,问题是,有很多字典,里面有一个字典列表,我怎么能做到这一点??(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,

我需要得到这个json响应的“ID”,问题是,有很多字典,里面有一个字典列表,我怎么能做到这一点??(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 ```

试着这样做:

ids=[item[“id”]用于json_数据中的项[“playlists”][“items”]]
这称为列表理解

您想在
“播放列表”
键中的所有
“项目”
上迭代

您可以访问该项目列表:

json_数据[“播放列表”][“项目”]

然后迭代项目中的每个项目:

用于json_数据中的项目[“播放列表”][“项目”]

然后访问每个项目的
“id”


item[“id”]

您可以使用object的键为对象编制索引。我可以看到对象中存在两个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中).

请提供一个最小的代码。代码没有解释的其他事项包括,如果您已将json处理成一个字典,因为它可能已被读取为字符串,那么将产生此错误。
对于dict中的x
迭代其键。您应该显式迭代
dict.values()
dict.items()
如果您同时需要键和值,请始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)放在问题中(不是注释)。还有其他有用的信息。