加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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])

当然,如果订单无关紧要,那么最好使用collections.defaultdict

>>> 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])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读