Python的enumerate()
返回索引和值的元组:
enumerate('abc')
((0,'a'),(1,'b'),(2,'c'))
我希望以item,index
顺序(('a', 0)
)获得那些元组。
我怎样才能做到这一点?
我想使用反转元组创建一个字典,如:
{'a':0,'b':1,'c':2}
使用dict
理解来扭转它:
result = {v: i for i, v in enumerate('abc')}
解决@karakfa的观点 - 这将覆盖可能重复的元素。如果你的字符串是abca
,为a
指定的索引值将包含3
,而不是0
。
一种解决方案是使用itertools
库:
import itertools
dict(zip('abc', itertools.count()))
itertools.count()
是一个生成器对象,它生成0,1,2 ......并且zip
函数只是...将两者一起拉出来。
总有好的,老式的匿名功能为你完成这项工作。这不是最干净的解决方案,但它完成了工作。
dict(map(lambda x: (x[1], x[0]), enumerate('abc')))
您还可以尝试使用列表理解:
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))
使用发电机:
>>> dict((v, i) for i, v in enumerate('abc'))
{'a': 0, 'b': 1, 'c': 2}
另一种方法是使用zip:
>>> s = 'abc'
>>> dict(zip(s, range(len(s))))
{'a': 0, 'b': 1, 'c': 2}