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

Python如何优雅统计元组列表中各key对应的不同value数量

实现方案

推荐两种常用的Pythonic写法,按需选择即可:

写法1:性能最优,可读性最高(推荐绝大多数场景使用)

利用collections.defaultdict搭配集合自动去重,时间复杂度为O(n):

from collections import defaultdict

# 示例输入
tuple_list = [("k1", 400), ("k1", 500), ("k2", 600), ("k2", 600), ("k3", 600)]

key_values = defaultdict(set)
for key, value in tuple_list:
    key_values[key].add(value)

# 转换为统计数量的结果
result = {k: len(v) for k, v in key_values.items()}

运行后result的值为{'k1': 2, 'k2': 1, 'k3': 1},完全符合预期。

如果不想导入外部模块,也可以用原生字典的setdefault方法实现相同逻辑:

tuple_list = [("k1", 400), ("k1", 500), ("k2", 600), ("k2", 600), ("k3", 600)]
key_values = {}
for key, value in tuple_list:
    key_values.setdefault(key, set()).add(value)
result = {k: len(v) for k, v in key_values.items()}

写法2:一行实现(适合小数据集使用)

如果偏好更短的代码,可以用itertools.groupby实现,注意该方法需要先对输入列表按key排序,时间复杂度为O(n log n),大数据量下性能不如第一种写法:

from itertools import groupby

tuple_list = [("k1", 400), ("k1", 500), ("k2", 600), ("k2", 600), ("k3", 600)]
result = {k: len(set(v for _, v in group)) for k, group in groupby(sorted(tuple_list), key=lambda x: x[0])}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:05