在嵌套字典中求和值

问题描述 投票:1回答:7

对不起,我没有说清楚我的问题。我有一个变量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的第一个问题,我认为我没有清楚地说明我的问题。谢谢你的回复。

python dictionary sum
7个回答
2
投票

建立你几乎得到的东西..

d1[1]['c'] = d1[1]['a'] + d1[1]['b']
d1[2]['c'] = d1[2]['a'] + d1[2]['b']

这不是pythonic的做事方式(Ryan Stein的答案是),其他答案是。但这显示了另一种访问字典中值的方法。


1
投票

您可以尝试使用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}}

1
投票

如果您希望每个词典条目的键'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}}


1
投票

迭代dict。在内部dict对象中添加新键。

for key in d1:
    d1.get(key)['c'] = sum(d1.get(key).values())

1
投票
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'])

0
投票

您可以通过列表理解和总和来实现,

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

0
投票

如果已知dict只有两级,则可以使用理解。

{k: dict(zip(v.keys() + ['c'], v.values() + [sum(v.values())])) for k,v in d1.items()}
© www.soinside.com 2019 - 2024. All rights reserved.