目前我填充从networkx
的MultiDiGraph
模块发电机更换单个值,以这样的方式在字典中的Python列表理解与其他项目
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 = 'EFGHIJKLMNabcdefghiwxyz'
key = 'rna'
edata = {'color': '#E41A1C', 'seq_type': 'rna', 'fontcolor': '#E41A1C', 'weight': 1, 'label': 'DEFGHIJK (nreads=1)'}
为什么它必须是列表理解?您正在更新列表中的可变值,**不生成*新*列表。 – 2013-05-14 16:37:36
对于那些用科学术语来说是困难的人来说,张贴可变数据会很好,所以凡人可以看看它:) – Torxed 2013-05-14 16:40:06
最后的目标是将这些新的边缘添加到网络并删除旧的,所以我想我*我正在创建一个新列表。我想使用一个列表理解生成器,因为我可能会有许多新的边缘添加到'MultiDiGraph' self.g'中,并且'MultiDiGraph.add_edges_from'使用迭代器更快。 – 2013-05-14 16:41:19