目前,我正在从 networkx
的 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])
但我还想更新 edata
字典中的单个 key, value
对,特别是 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)'}
最佳答案
您可以编写一个函数来为您进行处理,然后调用它以从生成器生成每个元素。您还可以利用 yield
编写自己的生成器函数,而不是尝试将其塞入生成器语句中。
关于python - 用其他项目替换 python 列表理解中 dict 中的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16548417/