如何用它们的总和替换dict值

时间:2015-02-24 04:33:35

标签: python

我的结果集采用dict s列表的形式(下面的示例数据):

l = [
  {'id' : 1, 'desc' : 'foo', 'v1' : 1, 'v2' : 2},
  {'id' : 2, 'desc' : 'bar', 'v1' : 3, 'v2' : 4},
  {'id' : 3, 'desc' : 'baz', 'v1' : 5, 'v2' : 6}
]

我想将此转换为v1和v2相加的形式,并替换为它们的总和值。结果如下:

[
  {'id' : 1, 'desc' : 'foo', 'v' : 3},
  {'id' : 2, 'desc' : 'bar', 'v' : 7},
  {'id' : 3, 'desc' : 'baz', 'v' : 11}
 ]

请在python 3.2中建议最好的方法。

修改

以下是我所拥有的:

for d in l: d['v'] = d.pop('v1') + d.pop('v2')

我不喜欢pop() s的部分,如果可能的话,我想摆脱这些部分并将其全部压缩在一行中。

2 个答案:

答案 0 :(得分:3)

怎么样......

def sum_v1_v2_into_v(list_of_dicts):
    for d in list_of_dicts:
        v1 = d.pop('v1')
        v2 = d.pop('v2')
        d['v'] = v1 + v2

看起来很明显,对吧?

如果出于一些完全奇怪和无法解释的原因,你想将它压缩成一行,那么将最后3行折叠成不太明显的单行:

        d['v'] = d.pop('v1') + d.pop('v2')

但我没有看到任何真正的优势 - 您是否必须为您编写的每行代码支付X,或者是什么? - )

答案 1 :(得分:0)

在一行中:

[each.update({'v':each.pop('v1')+ each.pop('v2')})for l in in]

它会返回:

[无,无,无]

但它会将名为“l”的dict更新为

[{'desc':'foo','id':1,'v':3},

{'desc':'bar','id':2,'v':7},

{'desc':'baz','id':3,'v':11}]