运算符 Itemgetter 没有在字典中给出正确的组计数?

Operator Itemgetter not giving proper group count in the dictionary?

res = [{'id': 'ANN6', 'empid': 'YUZP336'}, {'id': 'ANNW', 'empid': 'YUZP336'}, {'id': 'ANNW', 'empid': 'YUZP336'}, {'id': 'ANNW', 'empid': 'Y2Z2666'}, {'id': 'ANNW', 'empid': 'YUZN66N'}, {'id': 'ANNW', 'empid': 'YAZ6U96'}, {'id': 'ANNW', 'empid': 'Y26UNZA'}, {'id': 'ANNW', 'empid': 'Y2PN929'}, {'id': 'ANNW', 'empid': 'Y2PU692'}, {'id': 'AWZ2', 'empid': 'VAW6U2Z'}, {'id': 'ANNW', 'empid': 'YWU2AWW'}, {'id': 'ANNW', 'empid': 'QWWPZA2'}, {'id': 'AWZ2', 'empid': 'YUAU2A3'}, {'id': 'ANNW', 'empid': 'QWWW2AP'}, {'id': 'ANNW', 'empid': 'QWWPA93'}, {'id': 'ANNW', 'empid': 'Y2AN6A6'}, {'id': 'A6UP', 'empid': 'RBZ6N99'}, {'id': 'A6UW', 'empid': 'Y2P623A'}, {'id': 'ANNW', 'empid': 'Y22NPW6'}, {'id': 'ANNW', 'empid': 'QWWP2UP'}, {'id': 'APN6', 'empid': 'QWWZAN9'}, {'id': 'ANNW', 'empid': 'QWWA9ZN'}, {'id': 'ANNW', 'empid': 'QWWU6Z6'}, {'id': 'ANNW', 'empid': 'QWWN3AA'}, {'id': 'ANNW', 'empid': 'YWUN6UP'}, {'id': 'ANNW', 'empid': 'Y266W23'}, {'id': 'ANNW', 'empid': 'Y3W39PP'}, {'id': 'ANNW', 'empid': 'Y23NPNU'}, {'id': 'ANNW', 'empid': 'QWW23NU'}, {'id': 'ANNW', 'empid': 'YWUZ9Z3'}, {'id': 'ANNW', 'empid': 'QWW3PPU'}, {'id': 'ANNW', 'empid': 'Y292Z9P'}, {'id': 'ANNW', 'empid': 'Y2P636U'}, {'id': 'ANNW', 'empid': 'Y2N39PA'}, {'id': 'ANNW', 'empid': 'QWWA3ZP'}, {'id': 'APA9', 'empid': 'YPNNP2A'}, {'id': 'ANNW', 'empid': 'YUN66U6'}, {'id': 'ANNW', 'empid': 'QWWW22U'}, {'id': 'AN6Z', 'empid': 'QWW62UU'}, {'id': 'ANNW', 'empid': 'Y269Z9A'}, {'id': 'ANNW', 'empid': 'YA9P9W6'}, {'id': 'APPA', 'empid': 'RX96393'}, {'id': 'ANNW', 'empid': 'RMZP266'}, {'id': 'A629', 'empid': 'XHWUWP3'}, {'id': 'ANNW', 'empid': 'RZ96A96'}, {'id': 'ANNW', 'empid': 'JH9Z3PW'}, {'id': 'ANNW', 'empid': 'Y23923U'}, {'id': 'ANNW', 'empid': 'RMZUW33'}, {'id': 'ANNW', 'empid': 'YWZ3PU3'}, {'id': 'AP99', 'empid': 'RX9Z2Z9'}, {'id': 'A6UU', 'empid': 'Y3W3Z2P'}, {'id': 'ANNW', 'empid': 'Y2Z2236'}, {'id': 'ANNW', 'empid': 'Y23932N'}, {'id': 'APZW', 'empid': 'VUX3Z2U'}, {'id': 'ANNP', 'empid': 'Y2AN2U2'}, {'id': 'ANNW', 'empid': 'YW662WW'}, {'id': 'ANN2', 'empid': 'Y22NPW6'}, {'id': 'ANNW', 'empid': 'QWW6322'}, {'id': 'A62Z', 'empid': 'YU9AWZ2'}, {'id': 'ANNW', 'empid': 'Y2A6ZPU'}, {'id': 'ANNW', 'empid': 'RX9NW23'}, {'id': 'ANNW', 'empid': 'Y3W3AA9'}, {'id': 'A62N', 'empid': 'Y2PZ393'}, {'id': 'ANNW', 'empid': 'RMZ9U23'}, {'id': 'ANZW', 'empid': 'QWW9WUN'}, {'id': 'ANNW', 'empid': 'QWWUWA6'}, {'id': 'ANNW', 'empid': 'YU9AWZ2'}, {'id': 'ANNW', 'empid': 'YUW2WNW'}, {'id': 'ANNW', 'empid': 'YGWWZU2'}, {'id': 'ANNW', 'empid': 'Y266AAP'}, {'id': 'ANNW', 'empid': 'Y3WP3UA'}, {'id': 'ANNW', 'empid': 'YU9ANU2'}, {'id': 'ANNW', 'empid': 'QWWW2W3'}, {'id': 'ANNW', 'empid': 'JQ3PZNN'}, {'id': 'ANNW', 'empid': 'RM93PU3'}, {'id': 'ANNW', 'empid': 'QWUWUUN'}, {'id': 'ANNW', 'empid': 'Q2U6APA'}, {'id': 'ANNW', 'empid': 'QWW6A2U'}, {'id': 'ANNW', 'empid': 'YU3323W'}, {'id': 'A6UW', 'empid': 'Y3WU93P'}, {'id': 'A623', 'empid': 'Q2ZA9A2'}, {'id': 'ANNW', 'empid': 'YW2UZUP'}, {'id': 'ANNW', 'empid': 'Y266NNW'}, {'id': 'ANNW', 'empid': 'Y22P99U'}, {'id': 'ANNW', 'empid': 'YONWNNU'}, {'id': 'ANNW', 'empid': 'Y2NZU3U'}, {'id': 'ANNW', 'empid': 'Y2ZZ9PN'}, {'id': 'AWN6', 'empid': 'QWW3PPU'}, {'id': 'ANNW', 'empid': 'QWW62U2'}, {'id': 'ANNW', 'empid': 'YUAU2A3'}, {'id': 'APNU', 'empid': 'VPXZ9P3'}, {'id': 'ANNW', 'empid': 'QWUAWUA'}, {'id': 'APZU', 'empid': 'YUAU2A3'}, {'id': 'ANNW', 'empid': 'SIZWNU3'}, {'id': 'ANNW', 'empid': 'Y296NZP'}, {'id': 'ANNW', 'empid': 'YUNNANN'}, {'id': 'ANNW', 'empid': 'Y2ZNAZZ'}, {'id': 'ANNW', 'empid': 'QWW3NNA'}, {'id': 'ANNW', 'empid': 'Y3W3Z2P'}, {'id': 'ANNW', 'empid': 'YU966WZ'}, {'id': 'ANNW', 'empid': 'QWWUWZN'}, {'id': 'ANNW', 'empid': 'QWWW2U9'}, {'id': 'ANNW', 'empid': 'Y2Z3ZPP'}, {'id': 'ANNW', 'empid': 'YW3ZU9P'}, {'id': 'ANNW', 'empid': 'RX9Z2Z9'}, {'id': 'AWNP', 'empid': 'QWWWU9P'}, {'id': 'ANNW', 'empid': 'QWWW22W'}, {'id': 'A629', 'empid': 'YU9AWZ2'}, {'id': 'APP2', 'empid': 'Y2336W3'}, {'id': 'APNU', 'empid': 'Y3W3696'}, {'id': 'APN6', 'empid': 'Y2Z9PZZ'}, {'id': 'ANNW', 'empid': 'YU23NP6'}, {'id': 'ANNW', 'empid': 'DA366AW'}, {'id': 'ANP9', 'empid': 'QWWW22U'}, {'id': 'AP9A', 'empid': 'QWW9WUN'}, {'id': 'APN6', 'empid': 'VAWA66A'}, {'id': 'ANNW', 'empid': 'Y3WPU93'}, {'id': 'ANNW', 'empid': 'Y26P999'}, {'id': 'ANN9', 'empid': 'Y22NPW6'}, {'id': 'ANNW', 'empid': 'QWWUPA2'}, {'id': 'ANNW', 'empid': 'QWWUAUW'}, {'id': 'ANNW', 'empid': 'QWW9ZW2'}, {'id': 'ANNW', 'empid': 'Y3W292W'}, {'id': 'ANNW', 'empid': 'YUZP336'}, {'id': 'APNP', 'empid': 'Q2ZA9A2'}, {'id': 'ANNW', 'empid': 'RMZ62ZA'}, {'id': 'ANP9', 'empid': 'Y2A6ZPU'}, {'id': 'ANNW', 'empid': 'UZX2UWP'}, {'id': 'A6W2', 'empid': 'QWWW2UA'}, {'id': 'ANN6', 'empid': 'Y2336W3'}, {'id': 'ANNW', 'empid': 'APUW9A9'}, {'id': 'ANNW', 'empid': 'DA63NPN'}, {'id': 'ANNW', 'empid': 'YW9NNWW'}, {'id': 'ANNW', 'empid': 'QWW292U'}, {'id': 'ANNW', 'empid': 'V6X9ZNZ'}, {'id': 'ANN6', 'empid': 'XHWUW6Z'}, {'id': 'ANNW', 'empid': 'Y3WPZNN'}, {'id': 'ANNW', 'empid': 'RM9PZ9A'}, {'id': 'ANNW', 'empid': 'RM9NP22'}, {'id': 'ANNW', 'empid': 'RM96AA9'}, {'id': 'APN6', 'empid': 'EP96ZZ2'}, {'id': 'ANNW', 'empid': 'EP96ZZ2'}, {'id': 'ANNW', 'empid': 'QWWWU9P'}, {'id': 'APPW', 'empid': 'RM96ZWW'}, {'id': 'ANNW', 'empid': 'Y2A9AW6'}, {'id': 'ANNW', 'empid': 'QWWNPAZ'}, {'id': 'AP99', 'empid': 'Y2A6ZPU'}, {'id': 'ANNW', 'empid': 'QWW62UU'}, {'id': 'AWNZ', 'empid': 'XFW2UWW'}, {'id': 'ANNW', 'empid': 'AA92633'}, {'id': 'ANNW', 'empid': 'TYZW6PZ'}, {'id': 'ANNW', 'empid': 'XGWA326'}, {'id': 'ANNW', 'empid': 'YUZUW62'}, {'id': 'ANNW', 'empid': 'Y2NUZA3'}, {'id': 'ANNW', 'empid': 'QWW6PPU'}, {'id': 'ANNW', 'empid': 'YW2WWA3'}, {'id': 'APP3', 'empid': 'Y3W3696'}, {'id': 'ANNW', 'empid': 'RM3NZ2Z'}, {'id': 'ANNW', 'empid': 'Y29Z2NA'}, {'id': 'ANNW', 'empid': 'DA9ZU3Z'}, {'id': 'APZW', 'empid': 'YWWAPNN'}, {'id': 'ANNW', 'empid': 'Y22Z26N'}, {'id': 'AZ29', 'empid': 'Y29AP9A'}, {'id': 'AUW9', 'empid': 'Y23923U'}, {'id': 'ANNW', 'empid': 'YUZWZZ9'}, {'id': 'ANNW', 'empid': 'QWW6AUN'}, {'id': 'ANNW', 'empid': 'QWWNP3P'}, {'id': 'A6W2', 'empid': 'Y3WPZPP'}, {'id': 'ANN2', 'empid': 'Y2336W3'}, {'id': 'ANNW', 'empid': 'RM9NU3A'}, {'id': 'ANNW', 'empid': 'QWWUAU2'}, {'id': 'ANNW', 'empid': 'Y22AAW2'}, {'id': 'ANNW', 'empid': 'Y2APWP6'}, {'id': 'ANNW', 'empid': 'Y22N2P6'}, {'id': 'ANNW', 'empid': 'Y3WP396'}, {'id': 'AN6Z', 'empid': 'Y266AAP'}, {'id': 'ANNW', 'empid': 'YUZP336'}, {'id': 'ANNW', 'empid': 'YUZP336'}, {'id': 'ANNW', 'empid': 'YUZP336'}]

代码如下

from operator import itemgetter
from itertools import groupby
from collections import OrderedDict
grouper = itemgetter('id', 'empid')
for i, v in groupby(res, key=grouper):
    print(f"The count {dict(id=i[0], empid=i[1])} :  {len(list(v))}")

我的输出没有给出正确的输出

{'id': 'ANNW', 'empid': 'YUZP336'} 上面的计数实际上是 12,但我得到了它的 3 次重复

The count  {'id': 'ANNW', 'empid': 'YUZP336'} : 2
The count  {'id': 'ANNW', 'empid': 'YUZP336'} : 1
The count  {'id': 'ANNW', 'empid': 'YUZP336'} : 3

像上面一样我需要提取所有的id和empid

The count  {'id': 'ANNW', 'empid': 'YUZP336'} : 12
The count  {'id': 'ANNW', 'empid': 'QWW3NNA'} : 1
The count  {'id': 'ANNW', 'empid': 'EP96ZZ2'} : 1
The count  {'id': 'APN6', 'empid': 'EP96ZZ2'} : 1
.........
...........

我建议为此使用 Pandas:

df=pd.DataFrame(res)
gr = df.groupby(['id', 'empid']).size()
gr=gr.reset_index()
for i in gr.index:
    print(f"The count {dict(id=gr.loc[i, 'id'], empid=gr.loc[i, 'empid'])} :  {gr.loc[i, 0]}")

输出:

The count {'id': 'A623', 'empid': 'Q2ZA9A2'} :  1
The count {'id': 'A629', 'empid': 'XHWUWP3'} :  1
The count {'id': 'A629', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'A62N', 'empid': 'Y2PZ393'} :  1
The count {'id': 'A62Z', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'A6UP', 'empid': 'RBZ6N99'} :  1
The count {'id': 'A6UU', 'empid': 'Y3W3Z2P'} :  1
The count {'id': 'A6UW', 'empid': 'Y2P623A'} :  1
The count {'id': 'A6UW', 'empid': 'Y3WU93P'} :  1
The count {'id': 'A6W2', 'empid': 'QWWW2UA'} :  1
The count {'id': 'A6W2', 'empid': 'Y3WPZPP'} :  1
The count {'id': 'AN6Z', 'empid': 'QWW62UU'} :  1
The count {'id': 'AN6Z', 'empid': 'Y266AAP'} :  1
The count {'id': 'ANN2', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANN2', 'empid': 'Y2336W3'} :  1
The count {'id': 'ANN6', 'empid': 'XHWUW6Z'} :  1
The count {'id': 'ANN6', 'empid': 'Y2336W3'} :  1
The count {'id': 'ANN6', 'empid': 'YUZP336'} :  1
The count {'id': 'ANN9', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANNP', 'empid': 'Y2AN2U2'} :  1
The count {'id': 'ANNW', 'empid': 'AA92633'} :  1
The count {'id': 'ANNW', 'empid': 'APUW9A9'} :  1
The count {'id': 'ANNW', 'empid': 'DA366AW'} :  1
The count {'id': 'ANNW', 'empid': 'DA63NPN'} :  1
The count {'id': 'ANNW', 'empid': 'DA9ZU3Z'} :  1
The count {'id': 'ANNW', 'empid': 'EP96ZZ2'} :  1
The count {'id': 'ANNW', 'empid': 'JH9Z3PW'} :  1
The count {'id': 'ANNW', 'empid': 'JQ3PZNN'} :  1
The count {'id': 'ANNW', 'empid': 'Q2U6APA'} :  1
The count {'id': 'ANNW', 'empid': 'QWUAWUA'} :  1
The count {'id': 'ANNW', 'empid': 'QWUWUUN'} :  1
The count {'id': 'ANNW', 'empid': 'QWW23NU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW292U'} :  1
The count {'id': 'ANNW', 'empid': 'QWW3NNA'} :  1
The count {'id': 'ANNW', 'empid': 'QWW3PPU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW62U2'} :  1
The count {'id': 'ANNW', 'empid': 'QWW62UU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6322'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6A2U'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6AUN'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6PPU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW9ZW2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWA3ZP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWA9ZN'} :  1
The count {'id': 'ANNW', 'empid': 'QWWN3AA'} :  1
The count {'id': 'ANNW', 'empid': 'QWWNP3P'} :  1
The count {'id': 'ANNW', 'empid': 'QWWNPAZ'} :  1
The count {'id': 'ANNW', 'empid': 'QWWP2UP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWPA93'} :  1
The count {'id': 'ANNW', 'empid': 'QWWPZA2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWU6Z6'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUAU2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUAUW'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUPA2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUWA6'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUWZN'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW22U'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW22W'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2AP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2U9'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2W3'} :  1
The count {'id': 'ANNW', 'empid': 'QWWWU9P'} :  1
The count {'id': 'ANNW', 'empid': 'RM3NZ2Z'} :  1
The count {'id': 'ANNW', 'empid': 'RM93PU3'} :  1
The count {'id': 'ANNW', 'empid': 'RM96AA9'} :  1
The count {'id': 'ANNW', 'empid': 'RM9NP22'} :  1
The count {'id': 'ANNW', 'empid': 'RM9NU3A'} :  1
The count {'id': 'ANNW', 'empid': 'RM9PZ9A'} :  1
The count {'id': 'ANNW', 'empid': 'RMZ62ZA'} :  1
The count {'id': 'ANNW', 'empid': 'RMZ9U23'} :  1
The count {'id': 'ANNW', 'empid': 'RMZP266'} :  1
The count {'id': 'ANNW', 'empid': 'RMZUW33'} :  1
The count {'id': 'ANNW', 'empid': 'RX9NW23'} :  1
The count {'id': 'ANNW', 'empid': 'RX9Z2Z9'} :  1
The count {'id': 'ANNW', 'empid': 'RZ96A96'} :  1
The count {'id': 'ANNW', 'empid': 'SIZWNU3'} :  1
The count {'id': 'ANNW', 'empid': 'TYZW6PZ'} :  1
The count {'id': 'ANNW', 'empid': 'UZX2UWP'} :  1
The count {'id': 'ANNW', 'empid': 'V6X9ZNZ'} :  1
The count {'id': 'ANNW', 'empid': 'XGWA326'} :  1
The count {'id': 'ANNW', 'empid': 'Y22AAW2'} :  1
The count {'id': 'ANNW', 'empid': 'Y22N2P6'} :  1
The count {'id': 'ANNW', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANNW', 'empid': 'Y22P99U'} :  1
The count {'id': 'ANNW', 'empid': 'Y22Z26N'} :  1
The count {'id': 'ANNW', 'empid': 'Y23923U'} :  1
The count {'id': 'ANNW', 'empid': 'Y23932N'} :  1
The count {'id': 'ANNW', 'empid': 'Y23NPNU'} :  1
The count {'id': 'ANNW', 'empid': 'Y266AAP'} :  1
The count {'id': 'ANNW', 'empid': 'Y266NNW'} :  1
The count {'id': 'ANNW', 'empid': 'Y266W23'} :  1
The count {'id': 'ANNW', 'empid': 'Y269Z9A'} :  1
The count {'id': 'ANNW', 'empid': 'Y26P999'} :  1
The count {'id': 'ANNW', 'empid': 'Y26UNZA'} :  1
The count {'id': 'ANNW', 'empid': 'Y292Z9P'} :  1
The count {'id': 'ANNW', 'empid': 'Y296NZP'} :  1
The count {'id': 'ANNW', 'empid': 'Y29Z2NA'} :  1
The count {'id': 'ANNW', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'ANNW', 'empid': 'Y2A9AW6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2AN6A6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2APWP6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2N39PA'} :  1
The count {'id': 'ANNW', 'empid': 'Y2NUZA3'} :  1
The count {'id': 'ANNW', 'empid': 'Y2NZU3U'} :  1
The count {'id': 'ANNW', 'empid': 'Y2P636U'} :  1
The count {'id': 'ANNW', 'empid': 'Y2PN929'} :  1
The count {'id': 'ANNW', 'empid': 'Y2PU692'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z2236'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z2666'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z3ZPP'} :  1
The count {'id': 'ANNW', 'empid': 'Y2ZNAZZ'} :  1
The count {'id': 'ANNW', 'empid': 'Y2ZZ9PN'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W292W'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W39PP'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W3AA9'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W3Z2P'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WP396'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WP3UA'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WPU93'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WPZNN'} :  1
The count {'id': 'ANNW', 'empid': 'YA9P9W6'} :  1
The count {'id': 'ANNW', 'empid': 'YAZ6U96'} :  1
The count {'id': 'ANNW', 'empid': 'YGWWZU2'} :  1
The count {'id': 'ANNW', 'empid': 'YONWNNU'} :  1
The count {'id': 'ANNW', 'empid': 'YU23NP6'} :  1
The count {'id': 'ANNW', 'empid': 'YU3323W'} :  1
The count {'id': 'ANNW', 'empid': 'YU966WZ'} :  1
The count {'id': 'ANNW', 'empid': 'YU9ANU2'} :  1
The count {'id': 'ANNW', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'ANNW', 'empid': 'YUAU2A3'} :  1
The count {'id': 'ANNW', 'empid': 'YUN66U6'} :  1
The count {'id': 'ANNW', 'empid': 'YUNNANN'} :  1
The count {'id': 'ANNW', 'empid': 'YUW2WNW'} :  1
The count {'id': 'ANNW', 'empid': 'YUZN66N'} :  1
The count {'id': 'ANNW', 'empid': 'YUZP336'} :  6
The count {'id': 'ANNW', 'empid': 'YUZUW62'} :  1
The count {'id': 'ANNW', 'empid': 'YUZWZZ9'} :  1
The count {'id': 'ANNW', 'empid': 'YW2UZUP'} :  1
The count {'id': 'ANNW', 'empid': 'YW2WWA3'} :  1
The count {'id': 'ANNW', 'empid': 'YW3ZU9P'} :  1
The count {'id': 'ANNW', 'empid': 'YW662WW'} :  1
The count {'id': 'ANNW', 'empid': 'YW9NNWW'} :  1
The count {'id': 'ANNW', 'empid': 'YWU2AWW'} :  1
The count {'id': 'ANNW', 'empid': 'YWUN6UP'} :  1
The count {'id': 'ANNW', 'empid': 'YWUZ9Z3'} :  1
The count {'id': 'ANNW', 'empid': 'YWZ3PU3'} :  1
The count {'id': 'ANP9', 'empid': 'QWWW22U'} :  1
The count {'id': 'ANP9', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'ANZW', 'empid': 'QWW9WUN'} :  1
The count {'id': 'AP99', 'empid': 'RX9Z2Z9'} :  1
The count {'id': 'AP99', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'AP9A', 'empid': 'QWW9WUN'} :  1
The count {'id': 'APA9', 'empid': 'YPNNP2A'} :  1
The count {'id': 'APN6', 'empid': 'EP96ZZ2'} :  1
The count {'id': 'APN6', 'empid': 'QWWZAN9'} :  1
The count {'id': 'APN6', 'empid': 'VAWA66A'} :  1
The count {'id': 'APN6', 'empid': 'Y2Z9PZZ'} :  1
The count {'id': 'APNP', 'empid': 'Q2ZA9A2'} :  1
The count {'id': 'APNU', 'empid': 'VPXZ9P3'} :  1
The count {'id': 'APNU', 'empid': 'Y3W3696'} :  1
The count {'id': 'APP2', 'empid': 'Y2336W3'} :  1
The count {'id': 'APP3', 'empid': 'Y3W3696'} :  1
The count {'id': 'APPA', 'empid': 'RX96393'} :  1
The count {'id': 'APPW', 'empid': 'RM96ZWW'} :  1
The count {'id': 'APZU', 'empid': 'YUAU2A3'} :  1
The count {'id': 'APZW', 'empid': 'VUX3Z2U'} :  1
The count {'id': 'APZW', 'empid': 'YWWAPNN'} :  1
The count {'id': 'AUW9', 'empid': 'Y23923U'} :  1
The count {'id': 'AWN6', 'empid': 'QWW3PPU'} :  1
The count {'id': 'AWNP', 'empid': 'QWWWU9P'} :  1
The count {'id': 'AWNZ', 'empid': 'XFW2UWW'} :  1
The count {'id': 'AWZ2', 'empid': 'VAW6U2Z'} :  1
The count {'id': 'AWZ2', 'empid': 'YUAU2A3'} :  1
The count {'id': 'AZ29', 'empid': 'Y29AP9A'} :  1

itertools.groupby按预期工作,您需要先对数据进行排序。所以尝试在 groupby:

中传递 sorted(res, key=grouper) 而不是 res
sorted_res = sorted(res, key=grouper)

# also using argument unpacking in the `for` statement
for (id_, empid), gr in groupby(sorted_res, key=grouper):
    print(f"The count {dict(id=id_, empid=empid)} :  {len(list(gr))}")

这给出了

The count {'id': 'A623', 'empid': 'Q2ZA9A2'} :  1
The count {'id': 'A629', 'empid': 'XHWUWP3'} :  1
The count {'id': 'A629', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'A62N', 'empid': 'Y2PZ393'} :  1
The count {'id': 'A62Z', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'A6UP', 'empid': 'RBZ6N99'} :  1
The count {'id': 'A6UU', 'empid': 'Y3W3Z2P'} :  1
The count {'id': 'A6UW', 'empid': 'Y2P623A'} :  1
The count {'id': 'A6UW', 'empid': 'Y3WU93P'} :  1
The count {'id': 'A6W2', 'empid': 'QWWW2UA'} :  1
The count {'id': 'A6W2', 'empid': 'Y3WPZPP'} :  1
The count {'id': 'AN6Z', 'empid': 'QWW62UU'} :  1
The count {'id': 'AN6Z', 'empid': 'Y266AAP'} :  1
The count {'id': 'ANN2', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANN2', 'empid': 'Y2336W3'} :  1
The count {'id': 'ANN6', 'empid': 'XHWUW6Z'} :  1
The count {'id': 'ANN6', 'empid': 'Y2336W3'} :  1
The count {'id': 'ANN6', 'empid': 'YUZP336'} :  1
The count {'id': 'ANN9', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANNP', 'empid': 'Y2AN2U2'} :  1
The count {'id': 'ANNW', 'empid': 'AA92633'} :  1
The count {'id': 'ANNW', 'empid': 'APUW9A9'} :  1
The count {'id': 'ANNW', 'empid': 'DA366AW'} :  1
The count {'id': 'ANNW', 'empid': 'DA63NPN'} :  1
The count {'id': 'ANNW', 'empid': 'DA9ZU3Z'} :  1
The count {'id': 'ANNW', 'empid': 'EP96ZZ2'} :  1
The count {'id': 'ANNW', 'empid': 'JH9Z3PW'} :  1
The count {'id': 'ANNW', 'empid': 'JQ3PZNN'} :  1
The count {'id': 'ANNW', 'empid': 'Q2U6APA'} :  1
The count {'id': 'ANNW', 'empid': 'QWUAWUA'} :  1
The count {'id': 'ANNW', 'empid': 'QWUWUUN'} :  1
The count {'id': 'ANNW', 'empid': 'QWW23NU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW292U'} :  1
The count {'id': 'ANNW', 'empid': 'QWW3NNA'} :  1
The count {'id': 'ANNW', 'empid': 'QWW3PPU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW62U2'} :  1
The count {'id': 'ANNW', 'empid': 'QWW62UU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6322'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6A2U'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6AUN'} :  1
The count {'id': 'ANNW', 'empid': 'QWW6PPU'} :  1
The count {'id': 'ANNW', 'empid': 'QWW9ZW2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWA3ZP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWA9ZN'} :  1
The count {'id': 'ANNW', 'empid': 'QWWN3AA'} :  1
The count {'id': 'ANNW', 'empid': 'QWWNP3P'} :  1
The count {'id': 'ANNW', 'empid': 'QWWNPAZ'} :  1
The count {'id': 'ANNW', 'empid': 'QWWP2UP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWPA93'} :  1
The count {'id': 'ANNW', 'empid': 'QWWPZA2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWU6Z6'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUAU2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUAUW'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUPA2'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUWA6'} :  1
The count {'id': 'ANNW', 'empid': 'QWWUWZN'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW22U'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW22W'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2AP'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2U9'} :  1
The count {'id': 'ANNW', 'empid': 'QWWW2W3'} :  1
The count {'id': 'ANNW', 'empid': 'QWWWU9P'} :  1
The count {'id': 'ANNW', 'empid': 'RM3NZ2Z'} :  1
The count {'id': 'ANNW', 'empid': 'RM93PU3'} :  1
The count {'id': 'ANNW', 'empid': 'RM96AA9'} :  1
The count {'id': 'ANNW', 'empid': 'RM9NP22'} :  1
The count {'id': 'ANNW', 'empid': 'RM9NU3A'} :  1
The count {'id': 'ANNW', 'empid': 'RM9PZ9A'} :  1
The count {'id': 'ANNW', 'empid': 'RMZ62ZA'} :  1
The count {'id': 'ANNW', 'empid': 'RMZ9U23'} :  1
The count {'id': 'ANNW', 'empid': 'RMZP266'} :  1
The count {'id': 'ANNW', 'empid': 'RMZUW33'} :  1
The count {'id': 'ANNW', 'empid': 'RX9NW23'} :  1
The count {'id': 'ANNW', 'empid': 'RX9Z2Z9'} :  1
The count {'id': 'ANNW', 'empid': 'RZ96A96'} :  1
The count {'id': 'ANNW', 'empid': 'SIZWNU3'} :  1
The count {'id': 'ANNW', 'empid': 'TYZW6PZ'} :  1
The count {'id': 'ANNW', 'empid': 'UZX2UWP'} :  1
The count {'id': 'ANNW', 'empid': 'V6X9ZNZ'} :  1
The count {'id': 'ANNW', 'empid': 'XGWA326'} :  1
The count {'id': 'ANNW', 'empid': 'Y22AAW2'} :  1
The count {'id': 'ANNW', 'empid': 'Y22N2P6'} :  1
The count {'id': 'ANNW', 'empid': 'Y22NPW6'} :  1
The count {'id': 'ANNW', 'empid': 'Y22P99U'} :  1
The count {'id': 'ANNW', 'empid': 'Y22Z26N'} :  1
The count {'id': 'ANNW', 'empid': 'Y23923U'} :  1
The count {'id': 'ANNW', 'empid': 'Y23932N'} :  1
The count {'id': 'ANNW', 'empid': 'Y23NPNU'} :  1
The count {'id': 'ANNW', 'empid': 'Y266AAP'} :  1
The count {'id': 'ANNW', 'empid': 'Y266NNW'} :  1
The count {'id': 'ANNW', 'empid': 'Y266W23'} :  1
The count {'id': 'ANNW', 'empid': 'Y269Z9A'} :  1
The count {'id': 'ANNW', 'empid': 'Y26P999'} :  1
The count {'id': 'ANNW', 'empid': 'Y26UNZA'} :  1
The count {'id': 'ANNW', 'empid': 'Y292Z9P'} :  1
The count {'id': 'ANNW', 'empid': 'Y296NZP'} :  1
The count {'id': 'ANNW', 'empid': 'Y29Z2NA'} :  1
The count {'id': 'ANNW', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'ANNW', 'empid': 'Y2A9AW6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2AN6A6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2APWP6'} :  1
The count {'id': 'ANNW', 'empid': 'Y2N39PA'} :  1
The count {'id': 'ANNW', 'empid': 'Y2NUZA3'} :  1
The count {'id': 'ANNW', 'empid': 'Y2NZU3U'} :  1
The count {'id': 'ANNW', 'empid': 'Y2P636U'} :  1
The count {'id': 'ANNW', 'empid': 'Y2PN929'} :  1
The count {'id': 'ANNW', 'empid': 'Y2PU692'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z2236'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z2666'} :  1
The count {'id': 'ANNW', 'empid': 'Y2Z3ZPP'} :  1
The count {'id': 'ANNW', 'empid': 'Y2ZNAZZ'} :  1
The count {'id': 'ANNW', 'empid': 'Y2ZZ9PN'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W292W'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W39PP'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W3AA9'} :  1
The count {'id': 'ANNW', 'empid': 'Y3W3Z2P'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WP396'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WP3UA'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WPU93'} :  1
The count {'id': 'ANNW', 'empid': 'Y3WPZNN'} :  1
The count {'id': 'ANNW', 'empid': 'YA9P9W6'} :  1
The count {'id': 'ANNW', 'empid': 'YAZ6U96'} :  1
The count {'id': 'ANNW', 'empid': 'YGWWZU2'} :  1
The count {'id': 'ANNW', 'empid': 'YONWNNU'} :  1
The count {'id': 'ANNW', 'empid': 'YU23NP6'} :  1
The count {'id': 'ANNW', 'empid': 'YU3323W'} :  1
The count {'id': 'ANNW', 'empid': 'YU966WZ'} :  1
The count {'id': 'ANNW', 'empid': 'YU9ANU2'} :  1
The count {'id': 'ANNW', 'empid': 'YU9AWZ2'} :  1
The count {'id': 'ANNW', 'empid': 'YUAU2A3'} :  1
The count {'id': 'ANNW', 'empid': 'YUN66U6'} :  1
The count {'id': 'ANNW', 'empid': 'YUNNANN'} :  1
The count {'id': 'ANNW', 'empid': 'YUW2WNW'} :  1
The count {'id': 'ANNW', 'empid': 'YUZN66N'} :  1
The count {'id': 'ANNW', 'empid': 'YUZP336'} :  6
The count {'id': 'ANNW', 'empid': 'YUZUW62'} :  1
The count {'id': 'ANNW', 'empid': 'YUZWZZ9'} :  1
The count {'id': 'ANNW', 'empid': 'YW2UZUP'} :  1
The count {'id': 'ANNW', 'empid': 'YW2WWA3'} :  1
The count {'id': 'ANNW', 'empid': 'YW3ZU9P'} :  1
The count {'id': 'ANNW', 'empid': 'YW662WW'} :  1
The count {'id': 'ANNW', 'empid': 'YW9NNWW'} :  1
The count {'id': 'ANNW', 'empid': 'YWU2AWW'} :  1
The count {'id': 'ANNW', 'empid': 'YWUN6UP'} :  1
The count {'id': 'ANNW', 'empid': 'YWUZ9Z3'} :  1
The count {'id': 'ANNW', 'empid': 'YWZ3PU3'} :  1
The count {'id': 'ANP9', 'empid': 'QWWW22U'} :  1
The count {'id': 'ANP9', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'ANZW', 'empid': 'QWW9WUN'} :  1
The count {'id': 'AP99', 'empid': 'RX9Z2Z9'} :  1
The count {'id': 'AP99', 'empid': 'Y2A6ZPU'} :  1
The count {'id': 'AP9A', 'empid': 'QWW9WUN'} :  1
The count {'id': 'APA9', 'empid': 'YPNNP2A'} :  1
The count {'id': 'APN6', 'empid': 'EP96ZZ2'} :  1
The count {'id': 'APN6', 'empid': 'QWWZAN9'} :  1
The count {'id': 'APN6', 'empid': 'VAWA66A'} :  1
The count {'id': 'APN6', 'empid': 'Y2Z9PZZ'} :  1
The count {'id': 'APNP', 'empid': 'Q2ZA9A2'} :  1
The count {'id': 'APNU', 'empid': 'VPXZ9P3'} :  1
The count {'id': 'APNU', 'empid': 'Y3W3696'} :  1
The count {'id': 'APP2', 'empid': 'Y2336W3'} :  1
The count {'id': 'APP3', 'empid': 'Y3W3696'} :  1
The count {'id': 'APPA', 'empid': 'RX96393'} :  1
The count {'id': 'APPW', 'empid': 'RM96ZWW'} :  1
The count {'id': 'APZU', 'empid': 'YUAU2A3'} :  1
The count {'id': 'APZW', 'empid': 'VUX3Z2U'} :  1
The count {'id': 'APZW', 'empid': 'YWWAPNN'} :  1
The count {'id': 'AUW9', 'empid': 'Y23923U'} :  1
The count {'id': 'AWN6', 'empid': 'QWW3PPU'} :  1
The count {'id': 'AWNP', 'empid': 'QWWWU9P'} :  1
The count {'id': 'AWNZ', 'empid': 'XFW2UWW'} :  1
The count {'id': 'AWZ2', 'empid': 'VAW6U2Z'} :  1
The count {'id': 'AWZ2', 'empid': 'YUAU2A3'} :  1
The count {'id': 'AZ29', 'empid': 'Y29AP9A'} :  1

collections.Counter的替代方案:

>>> from operator import itemgetter
>>> from collections import Counter
>>> Counter(map(itemgetter('id', 'empid'), res))

Counter({('ANN6', 'YUZP336'): 1,
         ('ANNW', 'YUZP336'): 6,
         ('ANNW', 'Y2Z2666'): 1,
         ('ANNW', 'YUZN66N'): 1,
         ('ANNW', 'YAZ6U96'): 1,
         ('ANNW', 'Y26UNZA'): 1,
         ...