目前,我正在以networkx
的{{1}}模块填充生成器,这样:
MultiDiGraph
但我还想更新new_u0_edges = ((u, new_u1, key, edata) for u, v, key, edata in
self.g.edges_iter(u0, data=True,
keys=True) if v == path[0])
字典中的单个key, value
对,特别是edata
。使用列表而不是生成器执行此操作的缓慢方法是:
edata['label']
仅供参考,new_u0_edges = ((u, new_u1, key, edata) for u, v, key, edata in
self.g.edges_iter(u0, data=True,
keys=True) if v == path[0])
for u, new_u1, key, edata in new_u0_edges:
edata['label'] = u0[0] + new_u1`
和u0
都是字符串。是的,如果您有兴趣,这是deBruijn图表。
我的问题是:有没有办法在生成器中修改此new_u1
dict? edata
不会返回生成器所需的值,并列出理解似乎不允许重新分配。
谢谢!
更新:一些示例变量数据(仍在测试,因此看起来很傻):
dict.update([iterable])
答案 0 :(得分:2)
您可以编写一个函数来为您进行处理,然后调用它来生成生成器中的每个元素。您也可以利用yield
编写自己的生成器函数,而不是尝试将其填充到生成器语句中。
答案 1 :(得分:0)
((u, new_u1, key, edata) for u, v, key, edata in
self.g.edges_iter(u0, data=True,
keys=True) if v == path[0] and not edata.update({'label':u0[0]+new_u1}) )
我认为会有用......虽然它非常粗略