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

如何统计字典列表重复项并为其添加count键值对?

解决字典列表的重复项统计问题

你的思路方向是对的,但这里有个关键问题:字典是可变对象,直接用item not in summary来判断是否重复会失效,而且原列表里的字典也会被意外修改。另外,原列表中内容相同的字典是不同的对象,所以直接判断成员关系会把它们当成不同项处理。

我们可以换个思路,先用一个普通字典来统计每个唯一字典的出现次数,最后再转换成你想要的格式:

flist = [ {'ext' : '.txt', 'name' : 'file1'}, {'ext' : '.png', 'name' : 'picture1'}, {'ext' : '.txt', 'name' : 'file1'}, {'ext' : '.py', 'name' : 'script'}, ]

# 第一步:用不可变的元组作为键,统计次数
count_dict = {}
for item in flist:
    # 把字典转换成(键值对)的元组,因为元组不可变,可以作为字典的键
    key = tuple(item.items())
    if key in count_dict:
        count_dict[key] += 1
    else:
        count_dict[key] = 1

# 第二步:转换成目标格式的列表
summary = []
for key, count in count_dict.items():
    # 把元组转回字典,再加上count键
    item_dict = dict(key)
    item_dict['count'] = count
    summary.append(item_dict)

# 输出结果
for i in summary:
    print(i)

运行这段代码后,你会得到期望的输出:

{'ext': '.txt', 'name': 'file1', 'count': 2}
{'ext': '.png', 'name': 'picture1', 'count': 1}
{'ext': '.py', 'name': 'script', 'count': 1}

如果不想手动处理元组,也可以用frozenset来作为键(不过要注意字典的键值对是无序的,frozenset和tuple都能处理,只要原字典的键顺序不影响唯一性判断)。另外,这种方式不会修改原列表中的字典对象,避免了意外的副作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:59