我有一个类似[('a',2),('a',3),('b',3),('c',2),('b',4)]
的列表
我想对所有相似的键求和,得到[('a',5),('c',2),('b',7)]
任何顺序都可以。在
有没有更好的方法来代替使用字典呢。最好使用列表理解,比如[i for j in a for ...]
>>> a = [('a',2),('a',3),('b',3),('c',2),('b',4)]
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i,j in a:
... d[i] += j
...
>>> d
defaultdict(<type 'int'>, {'a': 5, 'c': 2, 'b': 7})
>>> zip(d.keys(),d.values())
[('a', 5), ('c', 2), ('b', 7)]
在Python-3中,最后一行需要list(zip(d.keys(),d.values()))
这在列表理解中与^{} 交替使用是可行的,尽管您的方法似乎很好,并且始终使用列表理解没有固有的好处。IMHO,在没有其他问题的情况下再多写一两行代码是一种徒劳的冒险。如果您希望进一步添加任何计数,那么将此结果保存为字典而不是列表也是有意义的—字典是更合适的结构。在
使用
itertools.groupby
方法,根据第一个元组元素对排序后的组求和。在输出:
^{pr2}$显然,这也可以作为字典理解的工具(,也许更适合)
相关问题 更多 >
编程相关推荐