You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用Counter处理字典列表并实现分组?

按字典列表指定字段分组的实现方案

先回顾你之前处理普通列表的分组逻辑:

将现有普通列表N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5],可通过以下代码按相同值分组:

N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
from collections import Counter
C = Counter(N)
print([[k, ] * v for k, v in C.items()])

执行后得到结果:[[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]。

现在你需要对这个字典列表按value字段做类似分组:

N = [
    {'doc':'A','value':300,'W':1},
    {'doc':'B','value':301,'W':0.5},
    {'doc':'C','value':301,'W':0.45},
    {'doc':'D','value':301,'W':0.3},
    {'doc':'E','value':300,'W':1},
]

这里给你两种实用的实现方法,都能达到和普通列表分组一致的逻辑效果:

方法一:用defaultdict直观分组

这种方法逻辑简单易懂,先把同value的字典统一收集,再转换成目标格式:

from collections import defaultdict

N = [
    {'doc':'A','value':300,'W':1},
    {'doc':'B','value':301,'W':0.5},
    {'doc':'C','value':301,'W':0.45},
    {'doc':'D','value':301,'W':0.3},
    {'doc':'E','value':300,'W':1},
]

# 初始化一个默认值为列表的字典,用来存分组结果
grouped_dict = defaultdict(list)
for item in N:
    # 以字典的value字段作为分组键,把当前字典加入对应分组
    grouped_dict[item['value']].append(item)

# 转换成你需要的列表格式
result = list(grouped_dict.values())
print(result)

执行后输出:

[
    [{'doc': 'A', 'value': 300, 'W': 1}, {'doc': 'E', 'value': 300, 'W': 1}],
    [{'doc': 'B', 'value': 301, 'W': 0.5}, {'doc': 'C', 'value': 301, 'W': 0.45}, {'doc': 'D', 'value': 301, 'W': 0.3}]
]

方法二:用itertools.groupby分组

注意groupby需要先对列表按分组字段排序,否则不连续的同值项会被分成多个组,代码如下:

from itertools import groupby

N = [
    {'doc':'A','value':300,'W':1},
    {'doc':'B','value':301,'W':0.5},
    {'doc':'C','value':301,'W':0.45},
    {'doc':'D','value':301,'W':0.3},
    {'doc':'E','value':300,'W':1},
]

# 先按value字段排序,确保同值项连续
sorted_N = sorted(N, key=lambda x: x['value'])
# 按value字段分组
grouped_data = groupby(sorted_N, key=lambda x: x['value'])
# 把分组后的迭代器转换成列表格式
result = [list(group) for _, group in grouped_data]
print(result)

执行后得到的结果和方法一完全一致。

如果你的需求是保留字典内容的分组,这两种方法都能完美满足;要是你只是想模仿普通列表输出“键重复对应次数”的结构,只需要把代码里的append(item)改成append(item['value'])即可。


内容的提问来源于stack exchange,提问作者Abiud Rds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:23