我遇到以下代码时遇到问题。我需要在python字典中添加一个键,如果它不存在,如果它存在,那么我需要添加到该值。 我的输出应该是这样的。
{'STA': {'value':-62**.***, 'count': 4}}.....
但是我得到了这个。
{'STA': {'value': -1194.14562548, 'count': 0}},
{'STA': {'value': -5122.985396600001, 'count': 0}},
{'STA': {'value': 25.2293, 'count': 0}},
{'STA': {'value': 34.0099, 'count': 0}},
我做错了什么?
new_dict = []
for item in sales_orders['progress_output']:
ex = (list(filter(lambda ex:ex['_branch_shortname'].strip() == item['_branch_shortname'].strip(), expenses)))
value = float(item['gross_profit'].strip().replace(',', '')) - (float(item['load_factor_extended'].strip().replace(',', '')) * float(ex[0]['value']))
branch = item['_branch_shortname'].strip()
if branch in new_dict:
new_dict[branch]['value'] += value
new_dict[branch]['count'] += 1
else:
new_dict.append({branch: {'value': value, 'count': 0}})
#print(item['_branch_shortname'], value)
print(new_dict)
答案 0 :(得分:1)
您可以使用setdefault确保存在默认值,setdefault
返回值(如果密钥已经存在(第一个参数))或添加默认值(第二个参数)并返回它:
new_dict = {}
for ...:
b = new_dict.setdefault(branch, {'value': 0, 'count': 0})
b['value'] += value
b['count'] += 1
您还可以使用defaultdict
:
from collections import defaultdict
new_dict = defaultdict(lambda: {'value': 0, 'count': 0})
for ...:
new_dict[branch]['value'] += value
new_dict[branch]['count'] += 1