我有一个值列表,我想将它们放在一个字典中,该字典会将每个值映射到它的索引。
我可以这样做:
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
这还不错,但我正在寻找更优雅的东西。
我遇到了以下情况,但它与我需要的相反:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
请分享您的解决方案,
谢谢
编辑:Python 2.6.4
对于包含 1000 个元素的列表,dict(zip) 版本是最快的,生成器和列表理解版本几乎相同,它们慢了约 1.5 倍,而功能映射(反转)则慢得多。
$ python -mtimeit -s"t = range(int(1e3))" "d = dict(zip(t, range(len(t))))"
1000 个循环,最好的 3:每个循环 277 微秒
$ python -mtimeit -s"t = range(int(1e3))" "d = dict([(y,x) for x,y in enumerate(t)])"
1000 个循环,最好的 3 个:426 usec per环形
$ python -mtimeit -s"t = range(int(1e3))" "d = dict((y,x) for x,y in enumerate(t))"
1000 个循环,最好的 3 个:每个循环 437 usec
$ python -mtimeit -s"t = range(int(1e3))" "d = dict(map(reversed, enumerate(t)))"
100 个循环,最好的 3 个:每个循环 3.66 毫秒
我尝试对更长和更短的列表(1e2、1e4、1e5)运行相同的测试,并且每个循环的时间与列表的长度成线性关系。
有人可以计时 py 2.7+ 版本吗?