我正在尝试合并来自几个服务器的日志。每个日志都是元组列表(date
、count
)。date
可能出现多次,我希望得到的字典保存来自所有服务器的所有计数的总和。
下面是我的尝试,有一些数据,例如:
from collections import defaultdict
a=[("13.5",100)]
b=[("14.5",100), ("15.5", 100)]
c=[("15.5",100), ("16.5", 100)]
input=[a,b,c]
output=defaultdict(int)
for d in input:
for item in d:
output[item[0]]+=item[1]
print dict(output)
它给出:
{'14.5': 100, '16.5': 100, '13.5': 100, '15.5': 200}
不出所料。
我正要发疯,因为一个同事看到了代码。她坚持认为,必须有一种更加Pythonic和优雅的方式来完成它,而不需要这些嵌套的for循环。有什么想法吗?
我想没有比这更简单的了:
a=[("13.5",100)]
b=[("14.5",100), ("15.5", 100)]
c=[("15.5",100), ("16.5", 100)]
input=[a,b,c]
from collections import Counter
print sum(
(Counter(dict(x)) for x in input),
Counter())
请注意,counter
(也称为multiset)是数据最自然的数据结构(一种元素可以不止一次或等价地属于它的集合类型--带有语义元素的映射->curpenceCount。
也可能:
from collections import Counter
from operator import add
print reduce(add, (Counter(dict(x)) for x in input))
注意,您还可以使用操作器.and_
来查找多组集的交集而不是求和。
上面的变体非常慢,因为每一步都会创建一个新的计数器。我们来解决吧。
我们知道counter+counter
返回一个包含合并数据的新的counter
。这是可以的,但我们希望避免额外的创造。让我们改用counter.update
:
更新(self,iterable=none,**kwds)未绑定的Collections.Counter方法
类似于dict.update(),但是添加计数而不是替换它们。源可以是可迭代、字典或其他计数器实例。
这就是我们想要的。让我们用一个与reduce
兼容的函数包装它,看看会发生什么。
def updateInPlace(a,b):
a.update(b)
return a
print reduce(updateInPlace, (Counter(dict(x)) for x in input))
问题内容: 我正在尝试合并来自多个服务器的日志。每个日志都是一个元组列表(,)。可能会出现多次,并且我希望结果字典能够保存所有服务器的所有计数之和。 这是我的尝试,例如一些数据: 这使: 如预期的那样。 我要去吃香蕉,因为有一位同事看到了密码。 她坚持认为,必须有一种更加Python化和优雅的方法来做到这一点,而这些方法不能嵌套在循环中。有任何想法吗? 问题答案: 我认为没有比这更简单的了: 请注
本文向大家介绍Python合并字典,包括了Python合并字典的使用技巧和注意事项,需要的朋友参考一下 示例 考虑以下字典: Python 3.5+ 如本示例所示,重复的键映射到它们的最后一个值(例如,“ Clifford”覆盖“ Nemo”)。 Python 3.3以上 使用此技术,给定键的最前值优先,而不是最后一个(“ Clifford”被抛弃,取而代之的是“ Nemo”)。 Python 2
问题内容: 我正在尝试合并三个具有相同键,值列表或单个值的字典。 我需要将值中的所有项目添加到一个列表中。 我尝试了几种方法,但是大多数方法将值放入嵌套列表中。例如 我尝试通过遍历值来更新它: 但结果完全一样。我试图简单地添加列表,但是由于第三个字典只有一个浮点数,所以我做不到。 因此,我尝试首先以1和2的值添加列表,然后附加3的值。添加列表效果很好,但是当我尝试从第三个字典中添加浮点数时,突然整
问题内容: 我需要合并多个词典,例如: 随着A B C和D作为树的叶子像 词典的级别(深度)未知,可能是 在我的情况下,它代表目录/文件结构,其中节点为docs,而节点为文件。 我想将它们合并以获得: 我不确定如何使用Python轻松做到这一点。 问题答案: 这实际上是非常棘手的-特别是如果你希望在事物不一致时收到有用的错误消息,同时正确地接受重复但一致的条目(这里没有其他答案了……)。 假设你没
本文向大家介绍Python实现合并字典的方法,包括了Python实现合并字典的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现合并字典的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
问题内容: Python中是否有一个可用于深度合并字典的库: 以下: 当我结合时,我希望它看起来像: 问题答案: 我希望我不会重新发明轮子,但是解决方案相当短。而且,超级有趣的代码。 因此,其想法是将源复制到目标,并且每次源中的命令都进行递归。因此,如果在A中给定元素包含字典而在B中包含任何其他类型,则确实存在错误。