gpt4 book ai didi

如果另外两个键值对匹配,则 Python 对字典列表的值求和

转载 作者:太空狗 更新时间:2023-10-29 22:12:42 25 4
gpt4 key购买 nike

我有以下形式的字典列表:

lst = [{"Name":'Nick','Hour':0,'Value':2.75},
{"Name":'Sam','Hour':1,'Value':7.0},
{"Name":'Nick','Hour':0,'Value':2.21},
{'Name':'Val',"Hour":1,'Value':10.1},
{'Name':'Nick','Hour':1,'Value':2.1},
{'Name':'Val',"Hour":1,'Value':11},]

我希望能够对特定时间的某个名称的所有值求和,例如如果 Name == Nick and Hour == 0,我希望 value 为我提供满足条件的所有值的总和。 2.75 + 2.21,根据上面的文章。

我已经尝试了以下方法,但它并不能帮助我解决这两种情况。

finalList = collections.defaultdict(float)
for info in lst:
finalList[info['Name']] += info['Value']
finalList = [{'Name': c, 'Value': finalList[c]} for c in finalList]

这会汇总特定 Name 的所有值,而不检查 Hour 是否相同。我怎样才能将该条件也合并到我的代码中?

我的预期输出:

finalList = [{"Name":'Nick','Hour':0,'Value':4.96},
{"Name":'Sam','Hour':1,'Value':7.0},
{'Name':'Val',"Hour":1,'Value':21.1},
{'Name':'Nick','Hour':1,'Value':2.1}...]

最佳答案

考虑使用 pandas 模块——它对这样的数据集非常有用:

import pandas as pd

In [109]: lst
Out[109]:
[{'Hour': 0, 'Name': 'Nick', 'Value': 2.75},
{'Hour': 1, 'Name': 'Sam', 'Value': 7.0},
{'Hour': 0, 'Name': 'Nick', 'Value': 2.21},
{'Hour': 1, 'Name': 'Val', 'Value': 10.1},
{'Hour': 1, 'Name': 'Nick', 'Value': 2.1}]

In [110]: df = pd.DataFrame(lst)

In [111]: df
Out[111]:
Hour Name Value
0 0 Nick 2.75
1 1 Sam 7.00
2 0 Nick 2.21
3 1 Val 10.10
4 1 Nick 2.10

In [123]: df.groupby(['Name','Hour']).sum().reset_index()
Out[123]:
Name Hour Value
0 Nick 0 4.96
1 Nick 1 2.10
2 Sam 1 7.00
3 Val 1 10.10

将其导出为 CSV:

df.groupby(['Name','Hour']).sum().reset_index().to_csv('/path/to/file.csv', index=False)

结果:

Name,Hour,Value
Nick,0,4.96
Nick,1,2.1
Sam,1,7.0
Val,1,10.1

如果你想把它当作字典:

In [125]: df.groupby(['Name','Hour']).sum().reset_index().to_dict('r')
Out[125]:
[{'Hour': 0, 'Name': 'Nick', 'Value': 4.96},
{'Hour': 1, 'Name': 'Nick', 'Value': 2.1},
{'Hour': 1, 'Name': 'Sam', 'Value': 7.0},
{'Hour': 1, 'Name': 'Val', 'Value': 10.1}]

您可以使用 pandas 做很多奇特的事情:

In [112]: df.loc[(df.Name == 'Nick') & (df.Hour == 0), 'Value'].sum()
Out[112]: 4.96


In [121]: df.groupby('Name')['Value'].agg(['sum','mean'])
Out[121]:
sum mean
Name
Nick 7.06 2.353333
Sam 7.00 7.000000
Val 10.10 10.100000

关于如果另外两个键值对匹配,则 Python 对字典列表的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com