python - 用其他项目替换 python 列表理解中 dict 中的单个值

标签 python dictionary list-comprehension networkx

目前,我正在从 networkxMultiDiGraph 模块填充生成器,方法如下:

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`

仅供引用,u0new_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/

相关文章:

python - 是否有 scipy/numpy 方法来获取最近插值的索引?

Python:类型错误:不支持的操作数类型: 'float' 和 'list'

dictionary - F# 和元组输出

python - 如果字典不存在,则将其添加到字典中

python - 在一行中将数​​字减半

python - Django:在单独的线程中使用相同的测试数据库

python - 如何在内存中复制 tensorflow 网络状态以便参数更新后检索?

python - 将数据帧值与字典中的键范围进行比较并返回值

python - 简单的列表理解

python - 在Python列表理解的if子句中进行多次逻辑比较的最佳方法?