添加到Python Dictionary中的值

时间:2015-03-31 15:59:06

标签: python dictionary

我遇到以下代码时遇到问题。我需要在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)

1 个答案:

答案 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