在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议尽可能在map
和lambda
使用列表理解或生成器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是非常强大的,也比map
和lambda
的组合更快 。