Python 如何迭代嵌套字典列表?
我需要得到这个json响应的“ID”,问题是,有很多字典,里面有一个字典列表,我怎么能做到这一点??(PS:len(items)是20,所以我需要得到字典形式的20个IDPython 如何迭代嵌套字典列表?,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,
{'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”开始)作为文本(而不是屏幕截图)放在问题中(不是注释)。还有其他有用的信息。