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

Python中统计列表内重复字典元素并添加计数的实现方法

在Python中统计重复字典并添加计数字段的实现方法

当然可以实现!这是Python处理结构化数据时很常见的需求,我给你分享两种实用的解决方案,适配不同的场景:

方法一:使用collections.Counter(通用直观)

因为字典是不可哈希的类型,没法直接作为Counter的统计键,所以我们可以先把每个字典转换成可哈希的元组(将键值对按固定顺序排列,保证相同内容的字典生成完全一致的元组),再用Counter统计重复次数,最后还原成带count字段的字典列表。

代码示例:

from collections import Counter

data = [
 {'time': 10, 'data': 'abcd'},
 {'time': 10, 'data': 'abcd'},
 {'time': 11, 'data': 'bcd'},
 {'time': 12, 'data': 'dc'},
 {'time': 13, 'data': 'ak'},
 {'time': 11, 'data': 'bcd'}
]

# 将字典转换为排序后的键值对元组,避免键顺序影响(兼容所有Python版本)
tuple_items = tuple(sorted(item.items()) for item in data)
# 统计每个元组的出现次数
counted_results = Counter(tuple_items)
# 把元组转回字典,并合并count字段
final_data = [dict(item) | {'count': count} for item, count in counted_results.items()]

print(final_data)

注意:|运算符用于合并字典是Python3.9+的语法,如果你的版本更低,可以用{**dict(item), 'count': count}或者dict(item, count=count)来替代。

方法二:手动遍历统计(无需额外库,效率更高)

如果你的字典字段是固定的(比如这里只有time和data),可以直接用这两个字段的值组成元组作为唯一标识,手动遍历统计,不需要导入任何库,效率也更高。

代码示例:

data = [
 {'time': 10, 'data': 'abcd'},
 {'time': 10, 'data': 'abcd'},
 {'time': 11, 'data': 'bcd'},
 {'time': 12, 'data': 'dc'},
 {'time': 13, 'data': 'ak'},
 {'time': 11, 'data': 'bcd'}
]

temp_storage = {}
for item in data:
    # 用固定字段生成唯一可哈希键
    unique_key = (item['time'], item['data'])
    if unique_key in temp_storage:
        temp_storage[unique_key]['count'] += 1
    else:
        # 复制原字典避免修改原数据
        temp_storage[unique_key] = item.copy()
        temp_storage[unique_key]['count'] = 1

# 提取结果列表
final_data = list(temp_storage.values())

print(final_data)

两种方法都能得到你期望的输出,你可以根据自己的Python版本和数据结构复杂度选择合适的方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:07:42