2013-09-15 2 views
7

Используя следующий подход Я могу создать словарь значений:Как получить значение индекса для понимания списка?

{ 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} 

ответ

11

Используйте enumerate, чтобы получить индекс, а также как деталь из Iterable:

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

Update:

{ 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]), ... 
+0

Благодарим вас за ответ. Если я попробую это, я получаю ошибку «ключи должны быть строкой». Я думаю, что это потому, что он пытается использовать '(p.id, ind)' как ключевое значение для словаря; Я не могу понять, как этого избежать. – djq

+0

@celenius Работает отлично для меня, кортежи являются действительными ключами для dicts. –

+0

Но если вы знаете индекс, зачем вы хотите запросить словарь (используя индекс как часть ключа кортежа) для индекса? : P Это мой вопрос. – Shashank

3

Попробуйте использовать enumerate. Это функция-генератор, которая возвращает кортежи формы: (i, iterable [i]).

{ p.id : {'id': p.id, 'position': i} for i, p in enumerate(p_list)} 
Смежные вопросы