Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一行中为dict中的每个dict添加一个键_Python - Fatal编程技术网

Python 在一行中为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}} 这就是

我有一个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}}
这就是我所做的

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()}