根据员工姓名字段的值计算python列表中的值之和

根据员工姓名字段的值计算python列表中的值之和,python,Python,问候大家,我的python文件中有一个列表,根据这个列表,我如何计算每个员工a、B和C的实际持续时间之和 以下是我的名单: [{'employee_name': 'A', 'actual_duration': 14}, {'employee_name': 'A', 'actual_duration': 6}, {'employee_name': 'B', 'actual_duration': 8}, {'employee_name': 'B', 'actual_duration': 22}

问候大家,我的python文件中有一个列表,根据这个列表,我如何计算每个员工a、B和C的
实际持续时间之和

以下是我的名单:

[{'employee_name': 'A', 'actual_duration': 14}, 
{'employee_name': 'A', 'actual_duration': 6}, 
{'employee_name': 'B', 'actual_duration': 8}, 
{'employee_name': 'B', 'actual_duration': 22}, 
{'employee_name': 'C', 'actual_duration': 15}]

尝试以下操作,使用
for
循环迭代原始列表并连接项目:

for entry in times:
    if entry['employee_name'] not in map(lambda i: i['employee_name'], aggregate):
            aggregate.append(entry)
    else:
            aggregate[map(lambda i: i['employee_name'], aggregate).index(entry['employee_name'])]['actual_duration']+=entry['actual_duration']


一种方法是使用
collections.defaultdict

l = [   {'employee_name': 'A', 'actual_duration': 14}, 
        {'employee_name': 'A', 'actual_duration': 6}, 
        {'employee_name': 'B', 'actual_duration': 8}, 
        {'employee_name': 'B', 'actual_duration': 22}, 
        {'employee_name': 'C', 'actual_duration': 15}  ]

from collections import defaultdict
d_dict = defaultdict(int)

for k,v in [d.values() for d in l]:
    d_dict[k]+=v

new_l = []
for k,v in d_dict.items():
    new_l.append({'employee_name': k, 'actual_duration': v})

new_l
输出:

[{'actual_duration': 20, 'employee_name': 'A'},
 {'actual_duration': 30, 'employee_name': 'B'},
 {'actual_duration': 15, 'employee_name': 'C'}]

有两种方法,一种是使用默认dict:

your_data=[{'employee_name': 'A', 'actual_duration': 14},
{'employee_name': 'A', 'actual_duration': 6},
{'employee_name': 'B', 'actual_duration': 8},
{'employee_name': 'B', 'actual_duration': 22},
{'employee_name': 'C', 'actual_duration': 15}]


from collections import defaultdict

default_dict=defaultdict(list)

for i in your_data:
    track=[]
    for j,l in i.items():
        [track.insert(0, (l, j)) if isinstance(l,int) else track.insert(1,(l,j))]





    default_dict[track[1]].append(track[0][0])

print({'employee_name : {}'.format(key[0]):'actual_duration : {} '.format(sum(values)) for key,values in default_dict.items()})
输出:

{'employee_name : A': 'actual_duration : 20 ', 'employee_name : C': 'actual_duration : 15 ', 'employee_name : B': 'actual_duration : 30 '}
第二个详细解决方案,不使用默认命令:

就用熊猫吧

import pandas as pd

data = [{'employee_name': 'A', 'actual_duration': 14}, 
{'employee_name': 'A', 'actual_duration': 6}, 
{'employee_name': 'B', 'actual_duration': 8}, 
{'employee_name': 'B', 'actual_duration': 22}, 
{'employee_name': 'C', 'actual_duration': 15}]

result = pd.DataFrame(data).groupby('employee_name').sum()
print(result)

               actual_duration
employee_name                 
A                           20
B                           30
C                           15
如果你想要回口述,你可以这样做

result_dict = result.reset_index().to_dict('records')
print(result_dict)

[{'actual_duration': 20, 'employee_name': 'A'},
 {'actual_duration': 30, 'employee_name': 'B'},
 {'actual_duration': 15, 'employee_name': 'C'}]

您好,当您提出一个当前状态和期望的结果时,就好像您要求Stack Overflow社区只为您做您的工作一样——我确信这不是您想要的,这也不是Stack Overflow的目的。问这样一个问题的更好方法是展示您的尝试、任何错误输出或收到的错误消息、研究问题、分享您的研究并询问您不了解的部分,这样我们可以帮助您,但您仍然是代码的作者。简单:显示您的代码。您好,谢谢您的回复,这是我从一个巨大的项目中提取的一小段代码,因为它是机密的,我已经尝试了好几天了,我非常需要帮助,我已经尝试过了,它得到了所有东西的总和,因此我在这里问它提示:从集合导入计数器
import pandas as pd

data = [{'employee_name': 'A', 'actual_duration': 14}, 
{'employee_name': 'A', 'actual_duration': 6}, 
{'employee_name': 'B', 'actual_duration': 8}, 
{'employee_name': 'B', 'actual_duration': 22}, 
{'employee_name': 'C', 'actual_duration': 15}]

result = pd.DataFrame(data).groupby('employee_name').sum()
print(result)

               actual_duration
employee_name                 
A                           20
B                           30
C                           15
result_dict = result.reset_index().to_dict('records')
print(result_dict)

[{'actual_duration': 20, 'employee_name': 'A'},
 {'actual_duration': 30, 'employee_name': 'B'},
 {'actual_duration': 15, 'employee_name': 'C'}]