Python:迭代嵌套字典

2024-05-29 07:33:57 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下dictionary

playlists={'user':[
               {'playlist1':{
                    'tracks': [        
                    {'name': 'Karma Police','artist': 'Radiohead', 'count': "1.0"},
                    {'name': 'Bitter Sweet Symphony','artist': 'The Verve','count': "2.0"}                    
                     ]
                    }
               },
               {'playlist2':{
                    'tracks': [        
                    {'name': 'We Will Rock You','artist': 'Queen', 'count': "3.0"},
                    {'name': 'Roxanne','artist': 'Police','count': "5.0"}                    
                     ]
                  }
                },
              ]
            }

虽然不是很优雅,但我可以在这样的结构中获取键和值:

keys

^{pr2}$

并嵌套values

artist = playlists['user'][0]["playlist1"]['tracks'][0]['artist'] //Radiohead
count = playlists['user'][1]["playlist2"]['tracks'][0]['count'] //3.0

但我有点困惑,如何使用任何iteration工具访问allplaylists names for playlists和allartists for tracks in playlists。在

我该怎么做?在


Tags: namefordictionaryartistcountsweettrackskarma
2条回答

您可以使用以下代码访问播放列表名称和艺术家名称:

# Define generator to return dicts under each user
lists = (x for user in playlists.itervalues() for x in user)
print [name for play_list in lists for name in play_list.iterkeys()]

lists = (x for user in playlists.itervalues() for x in user)
track_lists = (content['tracks'] for p in lists for content in p.itervalues())
print [track['artist'] for track_list in track_lists for track in track_list]

输出:

^{pr2}$

请注意,{cd2}只能与cd3}一起使用。在

如果你想提取一个包含所有播放列表名称的简单列表,你可以使用列表理解。字典和列表的混合增加了一点复杂性。在

all_playlists = [ playlist_title 
                  for user in playlists 
                  for user_playlists in playlists[user]
                  for playlist_title in user_playlists ]
print all_playlists

all_artists = [ track['artist']
                for user in playlists
                for user_playlists in playlists[user]
                for playlist_title in user_playlists 
                for track in user_playlists[playlist_title]['tracks'] ]
print all_artists

给予

^{pr2}$

请注意,这将给出播放列表dict中所有用户的播放列表/艺术家的组合列表

相关问题 更多 >

    热门问题