python – 对具有相等值的列表求和并进行聚合
发布时间:2020-12-20 11:36:29 所属栏目:Python 来源:网络整理
导读:我有一对长度相同的列表,第一个包含int值,第二个包含浮点值.我希望用另一对列表替换它们,这些列表可能更短,但仍然具有相同的长度,其中第一个列表仅包含唯一值,第二个列表将包含每个匹配值的总和.也就是说,如果新对中第一个列表的第i个元素是x,并且x出现的原
我有一对长度相同的列表,第一个包含int值,第二个包含浮点值.我希望用另一对列表替换它们,这些列表可能更短,但仍然具有相同的长度,其中第一个列表仅包含唯一值,第二个列表将包含每个匹配值的总和.也就是说,如果新对中第一个列表的第i个元素是x,并且x出现的原始对的第一个列表中的索引是i_1,…,i_k,那么第i个新对中第二个列表的元素应包含原始对的第二个列表中索引i_1,i_k中的值的总和.
一个例子将澄清. 输入: ([1,2,1,3],[0.1,0.2,0.3,0.4,0.5,1.0]) 可能输出: ([1,[1.0,1.0]) 我试图在这里做一些列表理解技巧但失败了.我可以为此编写一个愚蠢的循环函数,但我相信这里应该有更好的东西. 解决方法
不是一个单行,但由于你没有发布你的解决方案,我会建议使用
collections.OrderedDict 的这个解决方案:
>>> from collections import OrderedDict >>> a,b = ([1,1.0]) >>> d = OrderedDict() >>> for k,v in zip(a,b): ... d[k] = d.get(k,0) + v ... >>> d.keys(),d.values() ([1,1.0]) 当然,如果订单无关紧要,那么最好使用 >>> from collections import defaultdict >>> a,'foo',1.0]) >>> d = defaultdict(int) >>> for k,b): d[k] += + v ... >>> d.keys(),d.values() ([3,'foo'],1.0,0.5]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |