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

Python如何检测嵌套字典中子字典内与多数值不一致的异常值

嵌套字典异常值筛选实现方案

实现思路

基于你给出的前置条件(每个子字典中超半数的值相同),可以按以下逻辑实现:

  • 遍历外层字典的每一个子字典节点
  • 统计子字典所有值的出现频率,取最高频值作为基准正常值
  • 遍历子字典的键值对,筛选出值不等于基准值的条目即为异常值

代码实现

方案1:使用collections.Counter(最简洁)

from collections import Counter

my_dict = {
    'k1': {'a': 11111,
            'aa': 11111,
            'b': 11111,
            'bb': 11111,
            'c': 11111,
            'cc': 11111,
            'd': 22222,
            'dd': 22223,
            'ee': 22222},
    'k2': {'f': 33333,
            'g': 33333,
            'h': 33333,
            'i': 33333,
            'j': 33333,
            'k': 44443,
            'l': 33334,
            'm': 44443,
            'n': 44443}
}

for outer_k, sub_dict in my_dict.items():
    if not isinstance(sub_dict, dict):
        continue
    # 取出现频率最高的基准值
    majority_val = Counter(sub_dict.values()).most_common(1)[0][0]
    # 筛选异常值
    for inner_k, val in sub_dict.items():
        if val != majority_val:
            print(f"异常条目:{outer_k}[{inner_k}] = {val}")

方案2:无额外依赖实现

利用「超半数的值相同,则排序后中间位置的值一定是基准值」的特性,无需导入第三方库:

for outer_k, sub_dict in my_dict.items():
    if not isinstance(sub_dict, dict):
        continue
    # 排序后取中间值作为基准
    sorted_vals = sorted(sub_dict.values())
    majority_val = sorted_vals[len(sorted_vals) // 2]
    # 筛选异常值
    for inner_k, val in sub_dict.items():
        if val != majority_val:
            print(f"异常条目:{outer_k}[{inner_k}] = {val}")

运行结果示例

异常条目:k1[d] = 22222
异常条目:k1[dd] = 22223
异常条目:k1[ee] = 22222
异常条目:k2[k] = 44443
异常条目:k2[l] = 33334
异常条目:k2[m] = 44443
异常条目:k2[n] = 44443

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:02