用其他项替换python list comprehension中的dict中的单个值

时间:2013-05-14 16:35:21

标签: python dictionary list-comprehension networkx

目前,我正在以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])

2 个答案:

答案 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}) )

我认为会有用......虽然它非常粗略