仅根据关键条件返回值的总和

时间:2017-10-04 16:56:39

标签: python python-2.7 python-3.x

我有以下列表

let basedataset = {}
let ajaxbase = {};
//setting api Urls
apiinterface();

function apiinterface() {
    ajaxbase.createuser = '/api/createuser'
}
//setting up payload for post method
basedataset.email = profile.getEmail()
basedataset.username = profile.getGivenName()
//setting up url for api 
ajaxbase.url = ajaxbase.createuser
ajaxbase.payload = basedataset;

//reusable promise based approach 
basepostmethod(ajaxbase).then(function(data) {
    console.log('common data', data);
}).catch(function(reason) {
    console.log('reason for rejection', reason)
});
//modular ajax (Post/GET) snippets
function basepostmethod(ajaxbase) {

    return new Promise(function(resolve, reject) {
        $.ajax({
            url: ajaxbase.url,
            method: 'post',
            dataType: 'json',
            data: ajaxbase.payload,
            success: function(data) {
                resolve(data);
            },
            error: function(xhr) {
                reject(xhr)
            }

        });
    });
}

并且只想返回键等于某个值的值的总和。例如。键等于6的值之和为0.3。我认为以下内容可行:

a = [(1:0.4), (6:0.15), (6:0.15), (7:0.1)]

任何有关正确语法的建议都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

我假设您实际上有一个dicts列表,而不是原始问题中python中不存在的任何奇怪的数据结构

a = [{1:0.4}, {6:0.15}, {6:0.15}, {7:0.1}]

from collections import defaultdict
sums = defaultdict(int)

for data_dict in a:
    for k,v in data_dict.items():
        sums[k] += v

print sums

答案 1 :(得分:0)

我相信这就是你要找的东西:

a = [[1,0.4], [6,0.15], [6,0.15], [7,0.1]]

sumvalue = 0
for b in a:
    if b[0] == 6:
        sumvalue += b[1]

在任何情况下,您在问题中呈现的列表都不存在。

如果某些东西不起作用,通常最好采取较小的步骤。

编辑:根据您的数据结构最终的样子,上面的答案可能会更好。

答案 2 :(得分:0)

a = [(1:0.4), (6:0.15), (6:0.15), (7:0.1)]是非法的python表达式。

你的意思是a = [{1:0.4}, {6:0.15}, {6:0.15}, {7:0.1}]

如果是,那么sum([item[6] for item in a if list(item.keys())==[6]])