从enumerate()交换索引和值?

时间:2017-12-15 23:50:24

标签: python

Python' s enumerate()返回索引和值的元组:

enumerate('abc')
((0,'a'),(1,'b'),(2,'c'))

我希望以item,index顺序(('a', 0))来获取这些元组。

我该怎么做?

我想使用反转元组创建一个字典,如:

{'a':0,'b':1,'c':2}

6 个答案:

答案 0 :(得分:4)

使用dict理解来反转它:

result = {v: i for i, v in enumerate('abc')}

解决@karakfa的问题 - 这将覆盖可能重复的元素。如果您的字符串为abca,则为a分配的索引值将包含3,而不是0

答案 1 :(得分:2)

一种解决方案是使用itertools库:

import itertools
dict(zip('abc', itertools.count()))

itertools.count()是一个生成器对象,它生成0,1,2 ......和zip函数......只需将两者合二为一。

答案 2 :(得分:1)

总有好的,老式的匿名功能为你完成这项工作。这不是最干净的解决方案,但它可以完成工作。

dict(map(lambda x: (x[1], x[0]), enumerate('abc')))

答案 3 :(得分:0)

使用发电机:

>>> dict((v, i) for i, v in enumerate('abc'))
{'a': 0, 'b': 1, 'c': 2}

答案 4 :(得分:0)

你也可以尝试列表理解:

new_data=((0,'a'),(1,'b'),(2,'c'))

print(tuple([(i[1],i[0])for i in new_data]))

输出:

(('a', 0), ('b', 1), ('c', 2))

答案 5 :(得分:0)

另一种方法是使用zip:

>>> s = 'abc'
>>> dict(zip(s, range(len(s))))
{'a': 0, 'b': 1, 'c': 2}