gpt4 book ai didi

python - 生成 python 字典只存储 iterable 的最后一个值

转载 作者:行者123 更新时间:2023-11-28 22:50:54 25 4
gpt4 key购买 nike

这是从数据库返回的对象列表:

>>> credit_transactions

[<Transaction: some detail>, <Transaction: more detail>, <Transaction: hello>, <Transaction: yay dummy data>]

以下是我用来生成字典的代码。这就是我想要做的,如果 tr.category 不止一次可用,那么 tr.amount 应该被添加到最后一个值。我现在得到的只是 tr.category 的最后一个值。

credit = { tr.category:tr.amount for tr in credit_transactions}

对于 credit_transactions 的以下值,上述代码仅为最后一个值生成字典键值对。如果键重复,我想要值的总和。

>>> for tr in credit_transactions:
... tr.category
...
<Category: Bonus>
<Category: Lottery>
<Category: Lottery>
<Category: Bonus>
<Category: Salary>
<Category: Bonus>
>>>

最佳答案

您可以显式求和:

sums = {}
for tr in credit_transactions:
try:
sums[tr.category] += tr.amount # not first in this category
except KeyError:
sums[tr.category] = tr.amount # first in this category

或者使用defaultdict ,它会自动将缺失的键初始化为零:

from collections import defaultdict
sums = defaultdict(float)
for tr in credit_transactions:
sums[tr.category] += tr.amount

正如您已经注意到的,如果您使用简单的字典理解,后面的项目会覆盖前面的项目,而不是求和。

关于python - 生成 python 字典只存储 iterable 的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266209/

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