在嵌套字典中求和值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在嵌套字典中求和值相关的知识,希望对你有一定的参考价值。
对不起,我没有说清楚我的问题。我有一个变量x,我一直在迭代,我想在字典中包含x及其相应的子字典。
例如,x表示公交车站号。 6号公交车站距离公交车起点站的距离为1,距离公交车站的最后一站距离为2。
由于我不知道我在任何时间在哪个公交车站,我没有在字典中的所有信息。
我想从一个空字典开始,迭代地更新不同的电台距离信息。
d1={}
d1 = {1: {'a': variable1, 'b': variable2}, 2: {'a': variable3, 'b': variable4}}
我想通过添加子字典中的值('a'和'b'的值的总和)将一个键:'c':'value'的值对插入d1,如下所示。
d1= {1: {'a': 11, 'b': 22, 'c': 'value'}, 2: {'a': 456, 'b': 789, 'c': 'value'}}
我想要公交车站的每个'c'的值
value = variable1 + variable2
value = variable3 + variable4
我希望我现在能够更好地澄清我的问题。这是我关于stackoverflow的第一个问题,我认为我没有清楚地说明我的问题。谢谢你的回复。
答案
建立你几乎得到的东西..
d1[1]['c'] = d1[1]['a'] + d1[1]['b']
d1[2]['c'] = d1[2]['a'] + d1[2]['b']
这不是pythonic的做事方式(Ryan Stein的答案是),其他答案是。但这显示了另一种访问字典中值的方法。
另一答案
您可以尝试使用Python3:
d1= {1: {'a': 14, 'b': 16}, 2: {'a':15, 'b': 15}}
new_data = {a:{**{c:d for c, d in b.items()}, **{'c':sum(b.values())}} for a, b in d1.items()}
输出:
{1: {'a': 14, 'b': 16, 'c': 30}, 2: {'a': 15, 'b': 15, 'c': 30}}
另一答案
如果您希望每个词典条目的键'a'
和'b'
总和为'c'
的键,那么for
循环就足以完成性和可读性。
d1 = {1: {'a': 11, 'b': 22}, 2: {'a': 456, 'b': 789}}
for item in d1.values():
item['c'] = item['a'] + item['b']
print(d1)
{1: {'a': 11, 'b': 22, 'c': 33}, 2: {'a': 456, 'b': 789, 'c': 1245}}
另一答案
迭代dict
。在内部dict
对象中添加新键。
for key in d1:
d1.get(key)['c'] = sum(d1.get(key).values())
另一答案
d1= {1: {'a': 11, 'b': 22, 'c': 'value'}, 2: {'a': 456, 'b': 789, 'c': 'value'}}
# d1[1]['c']=33
# d1[2]['c']=1245
for numbers in d1:
total = d1[numbers]["a"] + d1[numbers]["b"]
d1[numbers]["c"] = total
print(d1[1]["c"])
print(d1[2]['c'])
另一答案
您可以通过列表理解和总和来实现,
v1, v2, v3, v4 = 10, 5, 2, 3
d1 = {1: {'a': v1, 'b': v2}, 2: {'a': v3, 'b': v4}}
[d1[k].update({'c': sum(v.values())}) for k,v in d1.items()]
print(d1) # {1: {'a': 10, 'c': 15, 'b': 5}, 2: {'a': 2, 'c': 5, 'b': 3}}
另一答案
如果已知dict只有两级,则可以使用理解。
{k: dict(zip(v.keys() + ['c'], v.values() + [sum(v.values())])) for k,v in d1.items()}
以上是关于在嵌套字典中求和值的主要内容,如果未能解决你的问题,请参考以下文章