gpt4 book ai didi

python - 计算元素,然后删除重复项

转载 作者:行者123 更新时间:2023-12-03 17:11:46 25 4
gpt4 key购买 nike

所以我发现对元素进行分组和计数的最简单方法是通过 itertools .

我有这个“员工部门”列表(例如会计、采购、营销等),超过 500 个。其中的一个示例是:

# employee number, first name, last name, department, rate, age, birthdate

201601005,Raylene,Kampa,Purchasing,365,15,12/19/2001,;
200909005,Flo,Bookamer,Human Resources,800,28,12/19/1957,;
200512016,Jani,Biddy,Human Resources,565,20,8/7/1966,;
199806004,Chauncey,Motley,Admin,450,24,3/1/2000


我打算做的是计算某个部门下的所有员工,然后删除重复项。它应该看起来像(例如):
Accounting: 97
Marketing: 34
Purchasing: 45

该列表隐含为一个模块,因此我无法使用 CSV 读取它。以下是我的 itertools 的代码:
import empDataLT as x
from itertools import groupby

#Departments
def dept():
empDept = list() #converting empDataLT to list
for em in x.a:
empEm = em.strip().split(",")
empDept.append(empEm)
e = sorted(empDept, key=lambda x: x[3]) #sort data alphabetical
b = []
c = []
for s in e:
new_b = []
new_c = []
for value, repeated in groupby(s[3]):
new_b.append(value)
new_c.append(sum(1 for _ in repeated))
b.append(new_b)
c.append(new_c)
print(b)
print(c)
import empDataLT是作为模块隐含的 500 条记录列表。但是,此代码会产生以下结果:
[['A', 'c', 'o', 'u', 'n', 't', 'i', 'n', 'g'], [['A', 'c', 'o', 'u', 'n', 't', 'i', 'n', 'g'],
[[1, 2, 1, 1, 1, 1, 1, 1, 1], [1, 2, 1, 1, 1, 1, 1, 1, 1],

是的,显然它计算的是部门的信件。我仍在学习 Python,所以我不太确定如何修复它或任何解决方法。先感谢您!干杯。

PS:empData 是一个字符串,但应该被视为一个列表。

还有一件事,如果不是太多要求,这也需要它检查哪个部门的员 worker 数最多。但这不是那么重要。我可以找这个。 :D

最佳答案

使用 groupby 很好,但需要排序。

使用 collections.defaultdict完全避免排序:

s = """201601005,Raylene,Kampa,Purchasing,365,15,12/19/2001,; 
200909005,Flo,Bookamer,Human Resources,800,28,12/19/1957,;
200512016,Jani,Biddy,Human Resources,565,20,8/7/1966,;
199806004,Chauncey,Motley,Admin,450,24,3/1/2000"""


data = [ i.strip().split(",") for i in s.split(";")]

from collections import defaultdict
grpd_data = defaultdict(list)

for d in data:
grpd_data[d[3]].append(d)


print(grpd_data)
print()

# sort by lenght of list descending and enumerate it:
for idx,(key,value) in enumerate(sorted(grpd_data.items(), key=lambda i:-len(i[1])), 1):
print(idx,key,value,len(value))

输出(手动格式化):
 defaultdict(<class 'list'>, {
'Purchasing': [['201601005', 'Raylene', 'Kampa', 'Purchasing', '365', '15', '12/19/2001', '']],
'Human Resources': [[' 200909005', 'Flo', 'Bookamer', 'Human Resources', '800', '28', '12/19/1957', ''],
[' 200512016', 'Jani', 'Biddy', 'Human Resources', '565', '20', '8/7/1966', '']],
'Admin': [[' 199806004', 'Chauncey', 'Motley', 'Admin', '450', '24', '3/1/2000']]})

# with counts and sorted
1 Human Resources [[' 200909005', 'Flo', 'Bookamer', 'Human Resources', '800', '28', '12/19/1957', ''],
[' 200512016', 'Jani', 'Biddy', 'Human Resources', '565', '20', '8/7/1966', '']] 2
2 Purchasing [['201601005', 'Raylene', 'Kampa', 'Purchasing', '365', '15', '12/19/2001', '']] 1
3 Admin [[' 199806004', 'Chauncey', 'Motley', 'Admin', '450', '24', '3/1/2000']] 1

编辑 - 更大的数据:
big = s
for _ in range(200):
big += ";"+s

s = big

data = [ i.strip().split(",") for i in s.split(";")]

from collections import defaultdict
gr = defaultdict(list)

for d in data:
gr[d[3]].append(d)


for idx,(key,value) in enumerate(sorted(gr.items(), key=lambda i:-len(i[1])),1):
print(idx, len(value))

输出:
1 402
2 201
3 201

关于python - 计算元素,然后删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62230490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com