python为列表中的每个元素添加一个id

Fly*_*ger 3 python list

我想为每个元素添加一个id,如果元素多次出现,它应该在第一次出现时添加id,我不知道这个问题,任何人都可以帮助我

输入:

omg = ['a', 'b', 'c', 'a', 'b', 1]
Run Code Online (Sandbox Code Playgroud)

输出:

omg_id = [0, 1, 2, 0, 1, 3]
Run Code Online (Sandbox Code Playgroud)

sch*_*ggl 9

使用a defaultdict:按发生顺序获取id的小巧棘手的解决方案

from collections import defaultdict

omg = ['a', 'b', 'c', 'a', 'b', 1]
d = defaultdict(lambda: len(d))  # late binding allows d not to be defined yet
omg_id = [d[x] for x in omg]
# [0, 1, 2, 0, 1, 3]
Run Code Online (Sandbox Code Playgroud)

默认工厂为每个新密钥分配当前已知密钥的数量.由于密钥访问不仅返回而且还分配值,因此defaultdict在理解期间"增长".

  • @jpp是的,当我第一次发现工厂函数可以自引用(尚未存在的)实例时,我感到非常高兴.这使得各种简洁的魔法成为可能:) (2认同)