我希望收集每个日期的结果。
对于每个日期,递增通过失败的结果,并在字典中添加日期(如果不存在)。 我应该选择字典中的字典还是defaultdict?
例如:dates= {'2018-03-20': [{'pass': 2}, {'fail': 3}]}
如果日期不在dates中,则添加新日期并更新特定日期的“通过”/“失败”值。
我希望收集每个日期的结果。
对于每个日期,递增通过失败的结果,并在字典中添加日期(如果不存在)。 我应该选择字典中的字典还是defaultdict?
例如:dates= {'2018-03-20': [{'pass': 2}, {'fail': 3}]}
如果日期不在dates中,则添加新日期并更新特定日期的“通过”/“失败”值。
如@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})})
collections.defaultdict(lambda: [{'pass':0}, {'fail':0}])
?然后执行c["12-01-2012"][0]["pass"] += 1
以创建/附加到现有日期。但你选择的结构很奇怪。为什么是只包含一个键(通过或失败)的字典列表呢? - Jean-François Fabre{'pass': 2,'fail': 3}
。 - wimcollections.defaultdict(lambda : {'pass':0},{'fail':0})
然后dates['2018-04-20']['pass'] += 1
- Jean-François Fabrecollections.defaultdict(collections.Counter)
。 - Jean-François Fabre