Понимание списка внутри понимания словаря - объем

Я пытаюсь создать полный график в словаре Python в 1 строке. Но при создании понимания списка для значений я не могу понять, как указать, что key_value не может отображаться в списке значений (говоря на графике, нет цикла).

для n узлов

G = {k:[v for v in range(n)] for k in range(n) }

приводит к этому (пример n = 3)

{0: [0, 1, 2], 1: [0, 1, 2], 2: [0, 1, 2]}

но то, что я хочу, это

{0: [1, 2], 1: [0, 2], 2: [0, 1]}

Но попробуй что-то похожее на это

G = {k:[v for v in range(n) for v !=k] for k in range(n) }

вызовет ошибку в k в понимании списка. Таким образом, k должно выходить за рамки понимания списка, что имеет смысл.

Можно ли определить G этим методом?


person Max Wen    schedule 07.06.2015    source источник
comment
{ k:[v for v in range(n) if v != k] for k in range(n) } Можно игнорировать значение v аналогично текущему значению k.   -  person Tanveer Alam    schedule 07.06.2015
comment
Спасибо, Танвир, это глупая ошибка с моей стороны. Вы должны публиковать как ответ вместо комментария, чтобы я мог выбрать его.   -  person Max Wen    schedule 07.06.2015
comment
Я рад, что это было полезно.   -  person Tanveer Alam    schedule 07.06.2015


Ответы (1)


Чтобы игнорировать key's value из списка value, вам просто нужно добавить подтверждение в свой понимание списка.

G = { k: [v for v in range(n) if v != k] for k in range(n) }

Таким образом, для n = 3 ваш график G вернет: -

{0: [1, 2], 1: [0, 2], 2: [0, 1]}
person Tanveer Alam    schedule 07.06.2015