Вложенное добавление атрибутов (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) ]