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

嵌套字典项计数方法及按日期统计结果的字典选型咨询

嘿,我来帮你搞定这两个Python字典相关的问题:

1. 如何统计嵌套字典中的项数?

这得分两种情况来看,取决于你要统计的范围:

  • 只统计顶层字典的项数:直接用len()函数就行,它会返回顶层键的数量。比如:

    nested_dict = {'level1_key1': {'level2_key1': 1, 'level2_key2': 2}, 'level1_key2': 3}
    print(len(nested_dict))  # 输出2,因为顶层有两个键
    
  • 递归统计所有层级的键值对数量:如果要把嵌套字典里的每一个键值对都算进去,就得写一个递归函数遍历所有层级。比如:

    def count_all_nested_items(dictionary):
        total = 0
        for key, value in dictionary.items():
            total += 1  # 先算当前层的这个项
            if isinstance(value, dict):  # 如果值还是字典,递归统计里面的项
                total += count_all_nested_items(value)
        return total
    
    nested_dict = {'a': {'b': 1, 'c': {'d': 4}}, 'e': 5}
    print(count_all_nested_items(nested_dict))  # 输出5:a、b、c、d、e
    
2. 按日期收集结果:用嵌套字典还是defaultdict?

强烈推荐用collections.defaultdict,它能帮你省掉手动判断日期是否存在的麻烦,代码更简洁也更不容易出错。

先说说你给的示例结构dates= {'2018-03-20': [{'pass': 2}, {'fail': 3}]}其实可以优化一下——把每个日期对应成一个包含pass和fail的字典(而不是列表里放两个字典),这样更新数值会方便很多。

用defaultdict的实现方式

from collections import defaultdict

# 初始化:每个新日期默认对应{'pass': 0, 'fail': 0}的字典
date_results = defaultdict(lambda: {'pass': 0, 'fail': 0})

# 更新已有日期的pass/fail值
date_results['2018-03-20']['pass'] += 2
date_results['2018-03-20']['fail'] += 3

# 添加新日期并更新(不用手动判断,直接操作就行)
date_results['2024-05-20']['pass'] += 1
date_results['2024-05-20']['fail'] += 2

# 转成普通字典查看最终结果
print(dict(date_results))
# 输出:{'2018-03-20': {'pass': 2, 'fail': 3}, '2024-05-20': {'pass': 1, 'fail': 2}}

如果用普通嵌套字典的话

你得手动写判断逻辑,检查日期是否已经存在,代码会繁琐一些:

date_results = {}

def update_date_stats(date, status, increment):
    # 如果日期不在字典里,先初始化它的pass和fail为0
    if date not in date_results:
        date_results[date] = {'pass': 0, 'fail': 0}
    # 更新对应状态的数值
    date_results[date][status] += increment

# 使用函数更新
update_date_stats('2018-03-20', 'pass', 2)
update_date_stats('2018-03-20', 'fail', 3)
update_date_stats('2024-05-20', 'pass', 1)

print(date_results)
# 输出和上面一致

对比下来,defaultdict的写法更直观,也减少了重复的判断代码,是更优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:48