Python 字典求和

Python 字典求和,python,dictionary,Python,Dictionary,我有一个字典stat,大小3 x 5(三个变量a,b和c,每个变量有五个数据点),并使用print(stat)获得以下输出: 并获得: sum_per_var = [ 106. 175. 249.] 但这种方法似乎真的很笨拙。是否有更简洁的方法来计算变量a、b和c?在普通Python中,您可以使用sums的列表理解和生成器理解: [sum(d[key] for d in stat.values()) for key in art] 例如: import datetime stat = {

我有一个字典
stat
,大小
3 x 5
(三个变量
a
b
c
,每个变量有五个数据点),并使用
print(stat)
获得以下输出:

并获得:

sum_per_var = [ 106.  175.  249.]

但这种方法似乎真的很笨拙。是否有更简洁的方法来计算变量
a
b
c

在普通Python中,您可以使用
sum
s的列表理解和生成器理解:

[sum(d[key] for d in stat.values()) for key in art]
例如:

import datetime
stat = {
    datetime.datetime(2017, 11, 3, 0, 0): {'a': 18, 'b': 82, 'c': 30}, 
    datetime.datetime(2017, 11, 4, 0, 0): {'a': 14, 'b': 10, 'c': 24}, 
    datetime.datetime(2017, 11, 5, 0, 0): {'a': 14, 'b': 61, 'c': 54}, 
    datetime.datetime(2017, 11, 6, 0, 0): {'a': 32, 'b': 10, 'c': 81}, 
    datetime.datetime(2017, 11, 7, 0, 0): {'a': 28, 'b': 12, 'c': 60}
}
art = ['a', 'b', 'c']
[sum(d[key] for d in stat.values()) for key in art]
# [106, 175, 249]
不过,使用熊猫可能更简单、更简洁:

import datetime
import pandas as pd
stat = {
    datetime.datetime(2017, 11, 3, 0, 0): {'a': 18, 'b': 82, 'c': 30}, 
    datetime.datetime(2017, 11, 4, 0, 0): {'a': 14, 'b': 10, 'c': 24}, 
    datetime.datetime(2017, 11, 5, 0, 0): {'a': 14, 'b': 61, 'c': 54}, 
    datetime.datetime(2017, 11, 6, 0, 0): {'a': 32, 'b': 10, 'c': 81}, 
    datetime.datetime(2017, 11, 7, 0, 0): {'a': 28, 'b': 12, 'c': 60}
}
pd.DataFrame(stat).T
#              a   b   c
# 2017-11-03  18  82  30
# 2017-11-04  14  10  24
# 2017-11-05  14  61  54
# 2017-11-06  32  10  81
# 2017-11-07  28  12  60
pd.DataFrame(stat).T.sum()
# a    106
# b    175
# c    249

什么是
数据
?你以后需要用吗?值是否始终为整数?范围(5)中k的
art[k]
将引发
索引器
异常。那是一个复制粘贴的代码吗?你怎么会得到
sum\u per\u var=[106.175.249.]
和一个
索引器
?ElisByberi我没有复制粘贴代码。这是一个更大项目的一部分,我想让我的问题尽可能清楚。我应该发布一个代码的最小工作示例。对不起。我只是想让问题变得清晰可见。@Samuel那么,你没有得到
索引器
异常?太好了!我非常喜欢熊猫的解决方案。非常感谢。
import datetime
stat = {
    datetime.datetime(2017, 11, 3, 0, 0): {'a': 18, 'b': 82, 'c': 30}, 
    datetime.datetime(2017, 11, 4, 0, 0): {'a': 14, 'b': 10, 'c': 24}, 
    datetime.datetime(2017, 11, 5, 0, 0): {'a': 14, 'b': 61, 'c': 54}, 
    datetime.datetime(2017, 11, 6, 0, 0): {'a': 32, 'b': 10, 'c': 81}, 
    datetime.datetime(2017, 11, 7, 0, 0): {'a': 28, 'b': 12, 'c': 60}
}
art = ['a', 'b', 'c']
[sum(d[key] for d in stat.values()) for key in art]
# [106, 175, 249]
import datetime
import pandas as pd
stat = {
    datetime.datetime(2017, 11, 3, 0, 0): {'a': 18, 'b': 82, 'c': 30}, 
    datetime.datetime(2017, 11, 4, 0, 0): {'a': 14, 'b': 10, 'c': 24}, 
    datetime.datetime(2017, 11, 5, 0, 0): {'a': 14, 'b': 61, 'c': 54}, 
    datetime.datetime(2017, 11, 6, 0, 0): {'a': 32, 'b': 10, 'c': 81}, 
    datetime.datetime(2017, 11, 7, 0, 0): {'a': 28, 'b': 12, 'c': 60}
}
pd.DataFrame(stat).T
#              a   b   c
# 2017-11-03  18  82  30
# 2017-11-04  14  10  24
# 2017-11-05  14  61  54
# 2017-11-06  32  10  81
# 2017-11-07  28  12  60
pd.DataFrame(stat).T.sum()
# a    106
# b    175
# c    249