Python 在一行中为dict中的每个dict添加一个键
我有一个dict,结构如下Python 在一行中为dict中的每个dict添加一个键,python,Python,我有一个dict,结构如下 {'kelly': {'w1': 8, 'w2': 12}, 'elisa': {'w1': 2, 'w2': 0}, 'julia': {'w1': 4, 'w2': 6}} 我会把这个结果告诉你 {'kelly': {'w1': 8, 'w2': 12, 'total': 20}, 'elisa': {'w1': 2, 'w2': 0, 'total': 2}, 'julia': {'w1': 4, 'w2': 6, 'total': 10}} 这就是
{'kelly': {'w1': 8, 'w2': 12},
'elisa': {'w1': 2, 'w2': 0},
'julia': {'w1': 4, 'w2': 6}}
我会把这个结果告诉你
{'kelly': {'w1': 8, 'w2': 12, 'total': 20},
'elisa': {'w1': 2, 'w2': 0, 'total': 2},
'julia': {'w1': 4, 'w2': 6, 'total': 10}}
这就是我所做的
def append_summation_field(data):
for k, v in data.items():
v['total'] = sum(v.values())
return data
我的问题是,我能在一行代码中完成这项工作吗,比如列表理解、lambda或其他什么
data = {'kelly': {'w1': 8, 'w2': 12},
'elisa': {'w1': 2, 'w2': 0},
'julia': {'w1': 4, 'w2': 6}}
print({k: {**v, "total": sum(v.values())} for k, v in data.items()})
列表理解会很复杂,因为结果应该是一个dict。您必须将其解包并重新打包为dict。但您可以在一行上使用for循环:
for k in d.keys(): d[k]['total']=sum(d[k].values())
在Python 3.9的框架下,使用dict update操作符,您还可以执行以下操作:
{k: v | {"total": sum(v.values())} for k, v in data.items()}
我认为您可以执行total:sumv.values,而不需要像这样的额外dict嵌套:{**v,total:sumv.values}。
{k: v | {"total": sum(v.values())} for k, v in data.items()}