У меня есть список объектов (кластеров), и каждый объект имеет атрибут vertices
, который представляет собой список чисел. Я хочу построить словарь (используя один лайнер), так что ключ является числом вершин, а значение является индексом соответствующего кластера в фактическом списке.Построить словарь, объединяющий несколько списков
Ex:
clusters[0].vertices = [1,2]
clusters[1].vertices = [3,4]
Ожидаемый результат:
{1:0,2:0,3:1,4:1}
я придумал следующее:
dict(reduce(lambda x,y:x.extend(y) or x, [
dict(zip(vertices, [index]*len(vertices))).items()
for index,vertices in enumerate([i.vertices for i in clusters])]))
Он работает ... но есть лучший способ сделать это?
Также прокомментируйте эффективность вышеуказанного фрагмента кода.
PS: Вершинные списки не пересекаются.
Возможно, вы имели в виду ожидаемый результат: {1: 0, 2: 0, 3: 1, ** 4: 1 **}? – kasyc
Извините ... обновил его :) – Graddy
Я предлагаю вам написать функцию, чтобы сделать это, а затем ваш однострочный вызов является вызовом функции. [Показатели удобочитаемости] (http://www.python.org/dev/peps/pep-0020/) – MattH