如何总结选择性字典值

问题描述:

我要过滤特定部门的工资和总结,我已经做了上半场,但添加这些工资,任何一个可以通过查看下面的代码表明....如何总结选择性字典值

chennai = {"name": "Kumar", "Department": "Sales",  "Age": 39,"Salary": 20} 
mumbai = {"name": "Suresh","Department": "Finance", "Age": 53,"Salary": 35} 
delhi = {"name": "Babu", "Department": "QC",  "Age": 28,"Salary": 10} 
kolkata = {"name": "Satish","Department": "Production","Age": 34,"Salary": 15} 
madurai = {"name": "Dev", "Department": "Management","Age": 45,"Salary": 23} 
hyderabad = {"name": "Rani", "Department": "Marketing", "Age": 46,"Salary": 25} 
bengalore = {"name": "Devi", "Department": "Production","Age": 24,"Salary": 5} 
cochin = {"name": "Sarath","Department": "Production","Age": 26,"Salary": 12} 
jaipur = {"name": "Senu", "Department": "Production","Age": 25,"Salary": 8} 
shimla = {"name": "Kumari","Department": "Management","Age": 37,"Salary": 20} 
lucknow = {"name": "Sanjay","Department": "Marketing", "Age": 52,"Salary": 30} 

employ = [chennai,mumbai,delhi,kolkata,madurai,hyderabad,bengalore,cochin,jaipur,shimla,lucknow] 

#Finding Production unit salary expenditure 
for x in employ: 
    sums = 0 
    if x ["Department"] == 'Production': 
     print x["Salary"] 

如果你想要一个班轮

result = sum(d.get("Salary", 0) for d in employ if d.get("Department") == "Production") 

也可以总和为多个。

departments = {"Production", "Marketing"} 
result = sum(d.get("Salary", 0) for d in employ if d.get("Department") in departments) 

我会建议使用熊猫(http://pandas.pydata.org/

import pandas as pd 
# Creating the dataframe 
dataset = pd.DataFrame(employ) 
print (dataset) 
#Out[3]: 
# Age Department Salary name 
#0 39  Sales  20 Kumar 
#1 53  Finance  35 Suresh 
#2 28   QC  10 Babu 
#3 34 Production  15 Satish 
#4 45 Management  23  Dev 
#5 46 Marketing  25 Rani 
#6 24 Production  5 Devi 
#7 26 Production  12 Sarath 
#8 25 Production  8 Senu 
#9 37 Management  20 Kumari 
#10 52 Marketing  30 Sanjay 

# Production Salary 
dataset1 = dataset[dataset['Department'] == 'Production'].Salary 
print (dataset1) 
#Out[6]: 
#3 15 
#6  5 
#7 12 
#8  8 
#Name: Salary, dtype: int64 

# Sum Salaries 
dataset2 = dataset[dataset['Department'] == 'Production'].Salary.sum() 
print (dataset2) 
# 40 

上面的代码看起来不那么漂亮,但大熊猫是非常强大的。 这里是你如何能得到按部门工资总额:

dataset3 = dataset.groupby('Department').sum()['Salary'] 
print (dataset3) 
#Out[8]: 
#Department 
#Finance  35 
#Management 43 
#Marketing  55 
#Production 40 
#QC   10 
#Sales   20 
#Name: Salary, dtype: int64 

如果你不想使用熊猫试试这个,

from collections import defaultdict 
salary = defaultdict(int) 
# for specific departments 
required_departments = ["Production"] 
for i in employ: 
    if i["Department"] in required_departments: 
     salary[i["Department"]] += i["Salary"] 
print(salary) 
# for all departments 
salary = defaultdict(int) 
for i in employ: 
    salary[i["Department"]] += i["Salary"] 

print(salary)