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
相关产品推荐
相关产品推荐

