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

Python统计哈希字典值出现频次及对应关联键实现方法

Python字典值列表元素统计方案

原始数据

data = {112: [25083], 25091: [6939], 32261: [9299, 6939, 3462], 32934: [7713, 6762, 6939], 34854: [6939], 56630: [7713]}

需求说明

需要实现两类统计结果:

  • 格式1:统计所有值列表内元素的出现频次,输出结构为{值元素: 出现次数}
  • 格式2:反向映射每个值元素对应的所属原字典键,输出结构为{值元素: [包含该值的原键列表]}

注:你给出的第二个输出示例中25083:[25083]为笔误,根据原始数据,25083是键112对应的值,正确映射应为25083:[112]

问题代码错误点

你之前写的代码核心错误是k.setdefault(i, set()).add(k):这里add传入的k是整个统计字典本身,不是当前遍历的原字典键,同时用set存储也不符合输出需要列表的要求。

正确实现代码

方案1:使用collections工具类(写法最简洁)

from collections import defaultdict, Counter

# 1. 统计值元素出现频次
# 展开所有值列表为一维序列,用Counter直接统计,按频次降序排序匹配示例顺序
count_result = dict(sorted(
    Counter(v for val_list in data.values() for v in val_list).items(),
    key=lambda x: -x[1]
))

# 2. 构建值到所属键的反向映射
key_map_result = defaultdict(list)
for origin_key, val_list in data.items():
    for v in val_list:
        key_map_result[v].append(origin_key)
# 同样按对应键的数量降序排序,匹配示例顺序
key_map_result = dict(sorted(
    key_map_result.items(),
    key=lambda x: -len(x[1])
))

# 打印结果
print(count_result)
print(key_map_result)

方案2:纯原生Python实现(无需导入额外模块)

# 1. 频次统计
count_result = {}
for val_list in data.values():
    for v in val_list:
        count_result[v] = count_result.get(v, 0) + 1
# 按频次降序排序
count_result = dict(sorted(count_result.items(), key=lambda x: -x[1]))

# 2. 反向键映射
key_map_result = {}
for origin_key, val_list in data.items():
    for v in val_list:
        if v not in key_map_result:
            key_map_result[v] = []
        key_map_result[v].append(origin_key)
# 按映射列表长度降序排序
key_map_result = dict(sorted(key_map_result.items(), key=lambda x: -len(x[1])))

运行输出结果

  • 频次统计结果(完全匹配你给出的预期示例):
{6939: 4, 7713: 2, 25083: 1, 9299: 1, 3462: 1, 6762: 1}
  • 值-键映射结果:
{6939: [25091, 32261, 32934, 34854], 7713: [32934, 56630], 25083: [112], 9299: [32261], 3462: [32261], 6762: [32934]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:36:22