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

如何高效统计嵌套字典中各子字典对应的父键数量?

高效统计嵌套字典中子字典的父键数量

这个场景我之前处理过,核心卡点在于字典是不可哈希类型,所以直接把子字典丢给collections.Counter肯定行不通——毕竟Counter的键必须是能被哈希的对象。不过只要把子字典转换成可哈希的格式,问题就迎刃而解了。

解决方案思路

把每个子字典转换成排序后的键值对元组:

  1. 元组是可哈希的,能直接作为Counter的统计键
  2. 排序是为了避免子字典键顺序不同导致误判(比如{1:1,2:2}和{2:2,1:1}本质是同一个字典,排序后生成的元组完全一致)

代码实现

from collections import Counter

products = { 1: {1:1, 2:2, 3:3}, 2: {1:1, 2:2, 3:3}, 3: {1:1, 2:2, 3:3}, 4: {1:2, 2:3, 3:4} }

# 遍历所有子字典,转成排序后的键值对元组,用Counter统计
sub_dict_counts = Counter(tuple(sorted(sub.items())) for sub in products.values())

# 如果你需要把结果转回字典格式展示(可选)
result = {dict(sub_tuple): count for sub_tuple, count in sub_dict_counts.items()}

# 输出结果
for sub_dict, count in result.items():
    print(f"{sub_dict}: {count}")

为什么这方法高效?

  • 只需要一次遍历所有父键对应的子字典,时间复杂度是O(n * m log m):其中n是父键数量(10000+),m是子字典的键数量。这个复杂度对于10000+的数据来说非常友好,远优于双重循环的O(n²)。
  • 完全利用了Counter的高效统计能力,不需要自己写复杂的比较逻辑。

补充说明

你之前尝试用Counter失败,就是因为直接传了不可哈希的字典;用列表存储也没用,因为列表同样不可哈希。把字典转成排序后的元组,既保留了所有数据信息,又满足了哈希要求,完美解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:02:52