目前我正在以这种方式从networkx
's模块填充生成器: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
并且new_u1
都是字符串。是的,如果您有兴趣,这是一个 deBruijn 图。
我的问题是:有没有办法edata
在生成器中修改这个字典? dict.update([iterable])
不返回生成器所需的值,并且列表推导似乎不允许重新分配。
谢谢!
更新:一些示例变量数据(仍在测试,所以看起来很傻):
u0 = 'DEFGHIJ'
new_u1 = 'EFGHIJKLMNabcdefghiwxyz012345'
key = 'rna'
edata = {'color': '#E41A1C', 'seq_type': 'rna', 'fontcolor': '#E41A1C', 'weight': 1, 'label': 'DEFGHIJK (nreads=1)'}