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

如何遍历含二维键的字典并计算词的标签分布?

解决标签对应词分布的计算问题

我懂你的需求啦——你想基于现有的字典数据,计算每个标签对应的词频分布比例。不过看你写的代码片段,应该是卡在了如何按标签分组获取对应词的计数这一步,因为原字典d的键是(词, 标签)的元组,直接用d[tag]会触发KeyError哦,这是因为d里根本没有以单个标签为键的项。

下面给你两种可行的实现方式,都能得到你想要的结果:

方法一:分步实现(清晰易懂)

这种方式先按标签分组收集词的计数,再计算比例,逻辑一目了然:

d = {('a','1'):4, ('a','2'):5, ('b','1'):6, ('b','2'):10}
tags = ('1','2')
d2 = {'1':10, '2':15}

# 用来存储最终每个标签的词分布
tag_distributions = {}

for tag in tags:
    # 第一步:收集当前标签下所有词的计数
    tag_word_counts = {}
    for (word, current_tag), count in d.items():
        if current_tag == tag:
            tag_word_counts[word] = count
    # 第二步:计算每个词的占比(除以d2中对应标签的值)
    dist_tag = {word: count / d2[tag] for word, count in tag_word_counts.items()}
    tag_distributions[tag] = dist_tag

print(tag_distributions)
# 输出结果:
# {'1': {'a': 0.4, 'b': 0.6}, '2': {'a': 0.3333333333333333, 'b': 0.6666666666666666}}

方法二:嵌套字典推导式(简洁高效)

如果喜欢更紧凑的代码,可以用嵌套的字典推导式一步完成,逻辑和上面完全一致:

d = {('a','1'):4, ('a','2'):5, ('b','1'):6, ('b','2'):10}
tags = ('1','2')
d2 = {'1':10, '2':15}

tag_distributions = {
    tag: {
        word: count / d2[tag]
        for (word, t), count in d.items()
        if t == tag
    }
    for tag in tags
}

print(tag_distributions)
# 得到和上面一样的结果

额外提示

  • 如果需要控制小数位数(比如只保留1位小数),可以把count / d2[tag]改成round(count / d2[tag], 1),这样标签'2'的结果会变成{'a':0.3, 'b':0.7}
  • 要确保d2中每个标签都有对应的值,如果存在缺失的标签,可以用d2.get(tag, 1)来避免KeyError(当然,除以1是临时方案,实际场景要根据需求处理缺失值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:33