如何计算嵌套字典中的项目数

3

我希望收集每个日期的结果。

对于每个日期,递增通过失败的结果,并在字典中添加日期(如果不存在)。 我应该选择字典中的字典还是defaultdict?

例如:dates= {'2018-03-20': [{'pass': 2}, {'fail': 3}]}

如果日期不在dates中,则添加新日期并更新特定日期的“通过”/“失败”值。


使用collections.defaultdict(lambda: [{'pass':0}, {'fail':0}])?然后执行c["12-01-2012"][0]["pass"] += 1以创建/附加到现有日期。但你选择的结构很奇怪。为什么是只包含一个键(通过或失败)的字典列表呢? - Jean-François Fabre
5
也许比冗长的列表更好:{'pass': 2,'fail': 3} - wim
是的:collections.defaultdict(lambda : {'pass':0},{'fail':0}) 然后 dates['2018-04-20']['pass'] += 1 - Jean-François Fabre
2
更简单的写法是 collections.defaultdict(collections.Counter) - Jean-François Fabre
1个回答

3

如@Jean-FrançoisFabre所指出的那样,最简单的方法是使用一个Counter对象的defaultdict

collections 文档中包含了这些工具的详细信息。

from collections import defaultdict, Counter

d = defaultdict(Counter)

d['2018-03-20']['pass'] += 1
d['2018-03-20']['fail'] += 1
d['2018-03-20']['pass'] += 1
d['2018-04-20']['pass'] += 1
d['2018-05-20']['pass'] += 1
d['2018-04-20']['fail'] += 1

结果:

defaultdict(collections.Counter,
            {'2018-03-20': Counter({'fail': 1, 'pass': 2}),
             '2018-04-20': Counter({'fail': 1, 'pass': 1}),
             '2018-05-20': Counter({'pass': 1})})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接