gpt4 book ai didi

python - DefaultDict 在两种情况下的行为都不同

转载 作者:行者123 更新时间:2023-11-30 22:24:40 28 4
gpt4 key购买 nike

我有以下内容:

a = [{ "_id" : { "reportId" : "5a27cda63fff647c33a14b31" }, "amount" : 3000 },
{ "_id" : { "reportId" : "5a27cda63fff647c33a14b31", "name" : "sriram sathyan" }, "amount" : 0 },
{ "_id" : { "reportId" : "5a27cf173f978655f2efbee7" }, "amount" : 1200 },
{ "_id" : { "reportId" : "5a27cf173f978655f2efbee7", "name" : "karthik subbaraj" }, "amount" : 0 }
]

我想要以下结构:

{'reportid1':{'name':'sriram sathyan','amount':3000}, .....}

我尝试了以下代码:

names = defaultdict(dict)
for item in a:
report_id = item['_id']['reportId']
amount = item['amount']
names[report_id] = {'name': item['_id'].get('name','')}
if amount != 0:
names[report_id].update({'amount': amount})
print(dict(names))

输出:

{'5a27cda63fff647c33a14b31': {'name': 'sriram sathyan'}, '5a27cf173f978655f2efbee7': {'name': 'karthik subbaraj'}}

(不是我想要的)

然后我将上面的代码更改为:

for item in a:
report_id = item['_id']['reportId']
amount = item['amount']
if amount != 0:
names[report_id] = {'amount': amount}
names[report_id].update({'name': item['_id'].get('name','')})
print(dict(names))

输出:

{'5a27cda63fff647c33a14b31': {'amount': 3000, 'name': 'sriram sathyan'}, '5a27cf173f978655f2efbee7': {'amount': 1200, 'name': 'karthik subbaraj'}}

(我想要什么!!!!)

所以问题是=>if 语句的位置怎么会导致这样的变化呢?或者我在这里缺少什么?

最佳答案

问题是您有相同的 key ,其中一个 key 的数据中的 amount 等于 0,而另一个 key 的 amount 为零。

在第一个循环中,首先创建金额非零的条目,然后被金额为零的条目覆盖

因此,两个代码都会覆盖一些条目,但第一个代码会覆盖您要保留的条目,而第二个代码(有效的代码)会覆盖金额为零的条目。

关于python - DefaultDict 在两种情况下的行为都不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773912/

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