我的结果集采用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的部分,如果可能的话,我想摆脱这些部分并将其全部压缩在一行中。
答案 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}]