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

如何找出字典列表中每个键对应的最常见值?

问题分析

你的代码存在两个核心问题:

  • 循环逻辑错误:for age in age_of_users for category in age_with_category会遍历每个年龄和所有字典,导致错误获取不属于该年龄的类别(甚至触发KeyError,比如用年龄18去访问{43:'electronic'}这个字典)。
  • 未按年龄分组统计:你把所有年龄的类别混在一起用Counter统计,只能得到全局出现次数最多的类别,而非每个年龄各自的最常见类别。
正确解决方案

我们需要先按年龄分组收集对应类别,再对每个年龄的类别列表单独统计频率:

from collections import Counter

age_with_category = [{18: 'book'}, {18: 'electronic'}, {43: 'electronic'}, {18: 'book'}, {18: 'book'}, {43:'electronic'}]

# 按年龄分组,收集每个年龄对应的所有类别
age_grouped = {}
for entry in age_with_category:
    # 取出单键字典中的年龄和类别
    age = next(iter(entry))
    category = entry[age]
    # 自动初始化列表并追加类别
    age_grouped.setdefault(age, []).append(category)

# 统计每个年龄的最常见类别,整理为目标格式
result = []
for age, categories in age_grouped.items():
    # most_common(1)返回[(类别, 次数)],取第一个元素的类别值
    top_category = Counter(categories).most_common(1)[0][0]
    result.append({age: top_category})

print(result)
# 输出: [{18: 'book'}, {43: 'electronic'}]
关键说明
  • 用next(iter(entry))提取单键字典的年龄,无需手动维护age_of_users列表,避免数据不一致。
  • dict.setdefault()简化分组逻辑,省去判断键是否存在的冗余代码。
  • 对每个年龄的类别列表单独使用Counter,确保统计的是该年龄下的类别频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49