【问题标题】:Nested addition of attributes (NetworkX) / dictionary comprehension嵌套添加属性(NetworkX)/字典理解
【发布时间】:2018-03-28 17:54:18
【问题描述】:

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

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

【问题讨论】:

    标签: python list-comprehension networkx dictionary-comprehension


    【解决方案1】:

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

    【讨论】:

    • 感谢@ducminh,第一部分很有帮助,出于可读性原因以及定义范围的灵活性,我更喜欢第二部分。
    【解决方案2】:

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

    【讨论】:

    • 顺便说一句,一行那么长,以正常的顺序方式编写它会更具可读性
    • 谢谢,这成功了!我现在将尝试解决难题的第二部分:)
    猜你喜欢
    • 2021-07-24
    • 2017-11-27
    • 2017-07-23
    • 2013-07-28
    • 2011-06-06
    • 2016-12-25
    • 2021-09-19
    • 2013-11-30
    相关资源
    最近更新 更多