这是我的字典:
d = {'dicta':{'a':1,'b':2,'c':3}, 'dictb':{'a':2,'b':3,'c':1}, 'dictc':{'a':2,'b':5,'c':9,'d':10}}
{'dicta': {'a': 1, 'b': 2, 'c': 3}, 'dictb': {'a': 2, 'b': 3, 'c': 1}, 'dictc': {'a': 2, 'b': 5, 'c': 9, 'd': 10}}
我想要做的是将这些嵌套的字典组合成一个扁平的字典,并将这些值相加得到:
{'a': 5, 'b': 10, 'c': 13, 'd': 10}
我已经可以使用以下代码实现这一点:
out = {}
for k,v in [[k2,d[k1][k2]] for k1 in d for k2 in d[k1]]:
if k in out.keys():
out[k] = out[k] + v
else:
out[k] = v
但是,如您所见,它不是很优雅。肯定有更好的办法!(雷蒙德·海廷格:D)。
我也可以做一个字典理解,显然每个键只保留一个条目:
out = {k2:d[k1][k2] for k1 in d for k2 in d[k1]}
输出:{'a': 2, 'b': 5, 'c': 9, 'd': 10}
或者至少给我想要组合的所有内容的列表理解:
out = [{k2:d[k1][k2]} for k1 in d for k2 in d[k1]]
输出:[{'a': 1}, {'b': 2}, {'c': 3}, {'a': 2}, {'b': 3}, {'c': 1}, {'a': 2}, {'b': 5}, {'c': 9}]
这感觉就像我越来越接近......
有没有办法以我不知道的非常优雅的方式以我想要的方式组合这些?
类似的东西:out = {k2:d[k1][k2] for k1 in d for k2 in d[k1] with combined = True}(显然没有意义,但为了说明这一点)
寻找最干净的方法来做到这一点
冉冉说
函数式编程
相关分类