在python中使用map处理列表时获取item的索引

在使用map()处理列表时,我想在lambda内部访问项目的索引。 我怎样才能做到这一点?

例如

ranked_users = ['jon','bob','jane','alice','chris'] user_details = map(lambda x: {'name':x, 'rank':?}, ranked_users) 

上面的例子中我怎样才能得到每个用户的排名?

使用枚举 :

 In [3]: user_details = [{'name':x, 'rank':i} for i,x in enumerate(ranked_users)] In [4]: user_details Out[4]: [{'name': 'jon', 'rank': 0}, {'name': 'bob', 'rank': 1}, {'name': 'jane', 'rank': 2}, {'name': 'alice', 'rank': 3}, {'name': 'chris', 'rank': 4}] 

PS。 我的第一个回答是

 user_details = map(lambda (i,x): {'name':x, 'rank':i}, enumerate(ranked_users)) 

我强烈build议尽可能在maplambda使用列表理解或生成器expression式。 列表parsing更具可读性,并且启动速度更快。

或者,你可以使用列表理解而不是map()和lambda。

 ranked_users = ['jon','bob','jane','alice','chris'] user_details = [{'name' : x, 'rank' : ranked_users.index(x)} for x in ranked_users] 

输出:

 [{'name': 'jon', 'rank': 0}, {'name': 'bob', 'rank': 1}, {'name': 'jane', 'rank': 2}, {'name': 'alice', 'rank': 3}, {'name': 'chris', 'rank': 4}] 

列表parsing是非常强大的,也比maplambda的组合更快 。