Вложенное добавление атрибутов (NetworkX) / словарь

Надеюсь, что этот заголовок не слишком неясен, я хотел бы добавить вложенное словарное понимание, с основной целью добавления атрибутов узла в NetworkX, используя циклы, с выводом, подобным этому:

[('x1', {'a': 0}, {'b': 5}, {'c': 10} ),
 ('x2', {'a': 1}, {'b': 6}, {'c': 11} ),
 ...]

То, что я думал, может работать:

a = [ ( 'x%d' % h, {'1st': i}, {'2nd': j},  {'3rd': k} ) 
      for h in range(1,17), for i in range(0,6), 
      for j in range(5,11), for k in range(10,16)  ]

Но это вернуло "SyntaxError: неверный синтаксис".

РЕДАКТИРОВАТЬ: Я буду задавать ранее упомянутую вторую часть в отдельном вопросе - пока спасибо!

2 ответа

Решение

В вашем коде есть синтаксические ошибки: запятые перед for являются недействительными Вам просто нужно удалить их, как указано в предыдущем ответе. Тем не менее, он будет вести себя как вложенный for петли, пока ты хочешь h, i, j, k увеличивать одновременно. Желаемый результат может быть достигнут следующим образом:

[ ( 'x%d' % h, {'1st': i}, {'2nd': j},  {'3rd': k} )
  for h, i, j, k in zip(range(1,17), range(0,6), range(5,11), range(10,16))]

Или даже лучше:

[ ( 'x%d' % (i+1), {'1st': i}, {'2nd': i+5},  {'3rd': i+10} ) for i in range(6)]

Удалить , между циклами:

a = [ ('x%d' % h, {'1st': i}, {'2nd': j}, {'3rd': k}) for h in range(1,17) for i in range(0,6) for j in range(5,11) for k in range(10,16) ]
Другие вопросы по тегам