如何获得列表推导的索引值?

时间:2013-09-15 19:01:30

标签: python list dictionary list-comprehension

使用以下方法,我可以创建值字典:

{ p.id : {'total': p.total} for p in p_list}

这导致{34:{'total':334}, 53:{'total: 123} ... }

我还想从列表中列出一个索引,以便我知道p.id所在的位置。我做了一个这样的列表:

 c_list = [x for x in range(len(p_list))] 

然后试着看看c如何也可以列为结果的一部分。我以为我需要这样的东西:

{ (p,c) for p in p_list for c in c_list} 

但是当我尝试实现它时,我无法将c作为字典中的值:

{ (p.id, c : {'total': p.total, 'position': c}) for p in p_list for c in c_list}

2 个答案:

答案 0 :(得分:11)

使用enumerate获取索引以及iterable中的项目:

{ (p.id, ind) : {'id': p.id, 'position': ind} for ind, p in enumerate(p_list)}

<强>更新

{ p.id : {'id': p.id, 'position': ind} for ind, p in enumerate(p_list)}

enumerate的帮助:

>>> print enumerate.__doc__
enumerate(iterable[, start]) -> iterator for index, value of iterable

Return an enumerate object.  iterable must be another object that supports
iteration.  The enumerate object yields pairs containing a count (from
start, which defaults to zero) and a value yielded by the iterable argument.
enumerate is useful for obtaining an indexed list:
    (0, seq[0]), (1, seq[1]), (2, seq[2]), ...

答案 1 :(得分:3)

尝试使用enumerate。它是一个生成器函数,它返回以下形式的元组:(i,iterable [i])。

{ p.id : {'id': p.id, 'position': i} for i, p in enumerate(p_list)}
相关问题