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