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

时间:2018-03-28 17:54:18

标签: python list-comprehension networkx dictionary-comprehension

希望这个标题不太清楚,我想添加一个嵌套字典理解,其基本目标是使用循环添加节点属性i 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 个答案:

答案 0 :(得分:2)

您的代码中存在语法错误:for之前的逗号无效。您只需要按照the previous answer中的说明删除它们。但是,它的行为类似于嵌套的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)]

答案 1 :(得分:1)

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