擅长:python、mysql、java
<p>如果项目已按该属性排序,则可以使用<code>itertools.groupby</code>获取组,使用<code>sum</code>获取其他属性的总和。您还必须首先将组转换为<code>list</code>,因为它们是迭代器。你知道吗</p>
<pre><code>>>> from itertools import groupby
>>> house.__repr__ = lambda h: "house(%r, %r, %r)" % (h.qt, h.cons, h.consper)
>>> [house(sum(h.qt for h in g), sum(h.cons for h in g), k)
... for k, g in ((k, list(g)) for k, g in groupby(l, key=lambda h: h.consper))]
[house(5, 51, 10), house(6, 70, 11), house(2, 40, 20), house(1, 25, 25)]
</code></pre>
<p>或使用字典:</p>
<pre><code>>>> d = {}
>>> for h in l:
... qt, cons = d.get(h.consper, (0, 0))
... d[h.consper] = qt + h.qt, cons + h.cons
...
>>> [house(a, b, c) for a, (b, c) in d.items()]
[house(25, 1, 25), house(10, 5, 51), house(11, 6, 70), house(20, 2, 40)]
</code></pre>