获取dict列表并从列表中的每一行汇总匹配键的所有值的最python方法是什么?在
我这么做了,但我怀疑一种理解更像Python:
from collections import defaultdict
demandresult = defaultdict(int) # new blank dict to store results
for d in demandlist:
for k,v in d.iteritems():
demandresult[k] = demandresult[k] + v
在Python - sum values in dictionary中,问题始终涉及同一个键,但在我的例子中,每行中的键可能是以前从未遇到过的新键。在
代码中唯一不清楚的是double for循环。如果将
demandlist
压缩成一个平坦的iterable,那么loopant将尽可能简单地呈现逻辑。考虑:(这样,
print(demandresult)
打印defaultdict(<class 'int'>, {'2018-04-29': 1, '2018-04-30': 1, '2018-05-01': 1, '2018-04-21': 1, '2018-04-18': 1, '2018-04-19': 1, '2018-04-17': 1})
。)想象自己第一次(或几个月后)读到这篇文章,我会想:“好吧,我正在将
demandlist
压缩成一个key valiterable,我不特别关心如何,然后求出匹配键的值。”不幸的是,我需要
map
来确保最后一个iterable具有key-val对……it.chain.from_iterable(demandlist)
是一个只包含key的iterable,所以我需要在每个dict上调用items
请注意,与许多建议的答案不同,这个实现(就像您的!)尽可能减少对数据的扫描次数,以获得一次性能上的胜利(我尽可能多地获得简单的性能胜利)。在
下面是另一个使用
collections.ChainMap
获取组合键的一行代码(ab-):这是这里提出的最慢的方法。在
我认为你的方法很像Python。理解是很好的,但是它们不应该太过分,而且它们会导致非常混乱的一行语句,比如下面的一行:)。在
如果你坚持要做dict comp:
相关问题 更多 >
编程相关推荐