There are two lists. one is code_list, the other is points
code_list= ['ab','ca','gc','ab','we','ca']
points = [30, 20, 40, 20, 10, -10]
These two lists connect each other like this: 'ab' = 30, 'ca'=20 , 'gc' = 40, 'ab'=20, 'we'=10, 'ca'=-10
From these two lists, If there are same elements, I wan to get sum of each element. Finally, I'll get a element which has the biggest point.
I'll hope to get a simple result like below:
'ab' has the biggest point: 50
Could you give me a your help?
解决方案
You can use a collections.Counter() instance:
>>> from collections import Counter
>>> code_list= ['ab','ca','gc','ab','we','ca']
>>> points = [30, 20, 40, 20, 10, -10]
>>> c = Counter()
>>> for key, val in zip(code_list, points):
... c[key] += val
...
>>> c.most_common(1)
[('ab', 50)]
zip() pairs up your two input lists.
It's that last call that makes the Counter() useful here, the .most_common() call uses max() internally for just one item, but for an argument greater than 1 heapq.nlargest() is used, and with no argument or asking for len(c), sorted() is used.