python中具有相同代码的sum list对象值

2024-05-31 23:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的初学者,我遇到了一些问题。我有这样一个对象列表:

[  
    {  
        'balance':-32399.0,
        'code':u'1011',
        'name':u'Stock Valuation Account'
    },
    {  
        'balance':-143503.34,
        'code':u'1011',
        'name':u'Stock Interim Account (Received)'
    },
    {  
        'balance':117924.2499995,
        'code':u'1011',
        'name':u'Stock Interim Account (Delivered)'
    },
    {  
        'balance':-3500000.0,
        'code':u'1101',
        'name':u'Cash'
    },
    {  
        'balance':-50000.0,
        'code':u'1101',
        'name':u'Other Cash'
    },
]

我需要根据代码求和,所以结果是。你知道吗

[  
    {  
        'balance':6819,91,
        'code':u'1011',
    },
    {  
        'balance':-3550000.0,
        'code':u'1101',
    },
]

已经搜索了StackOverflow,但仍然没有得到我需要的。 有什么帮助吗?。。。你知道吗


Tags: 对象代码name列表stockcodeaccountcash
3条回答

确切地说,在一些comprehensions中使用groupbysum: 正如评论中所说,使用groupby列表需要预先排序。 此外,可以在sortedgroupbykey参数中使用operator.attrgetter而不是lambda。你知道吗

l = [  
    {  
        'balance':-32399.0,
        'code':u'1011',
        'name':u'Stock Valuation Account'
    },
    ...
]

from itertools import groupby
import operator 

selector_func = operator.attrgetter("code")
l = sorted(l, key=selector_func)
result = [{"code" : code, "balance" : sum(x["balance"] for x in values)} for code, values in groupby(l, selector_func)]
print(result)

结果:

[{'code': '1011', 'balance': -57978.0900005}, {'code': '1101', 'balance': -3550000.0}]

这是live example

data = [
    {
        'balance':-32399.0,
        'code':u'1011',
        'name':u'Stock Valuation Account'
    },
    ...
]
d = {}
for entry in data:
    d[entry['code']] = d.get(entry['code'],0) + entry['balance']
print([{'balance':b,'code':c} for c,b in d.items()])

将打印:

[{'balance': -57978.0900005, 'code': '1011'}, {'balance': -3550000.0, 'code': '1101'}]

这是一个没有任何导入的oneliner:

a = ...
result = [{'balance' : sum([i['balance'] for i in a if i['code']==j]), 'code' : j} for j in set([k['code'] for k in a])]

输出

[{'balance': -3550000.0, 'code': '1101'}, {'balance': -57978.0900005, 'code': '1011'}]

相关问题 更多 >