嵌套添加属性(NetworkX)/字典理解

Nested addition of attributes (NetworkX) / dictionary comprehension

希望这个标题不太清楚,我想添加一个嵌套字典理解,其基本目标是使用循环在 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: invalid syntax"。

编辑:我将在一个单独的问题中询问前面提到的第二部分 - 到目前为止谢谢!

删除 for 循环之间的 ,:

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) ]

您的代码中存在语法错误: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)]