我有两个列表
populate_name = ['jack', 'Jill', 'Mary', 'Franco', 'jack', 'James', 'Dan', 'Mary']
populate_qty = ['2', '3', '1', '3', '4', '4', '3', '3']
我想输出累计添加的qty
最多的名称。
在这种情况下:
jack = (2 + 4) # 6
Jill = 3
Mary = (1 + 3) # 4
Franco = 3
James = 4
Dan = 3
此处获胜者为jack
,因此如何打印出名称,jack
及其价值,6
。
我试图浏览列表并使用populate_name.count(populate_name)
查找每个元素的出现次数,但这只是为了找到事件。此外,如果我在整个range(len(populate_name))
中运行for循环,它将重复。
注意
实际代码中的populate_name和populate_qty包含超过1K个元素。
答案 0 :(得分:3)
使用collections.Counter
!
import collections
counter = collections.Counter()
for name, qty in zip(populate_name, populate_qty):
counter[name] += qty
print counter.most_common()[0][0]
答案 1 :(得分:2)
您可以使用Python内置函数zip
和dict
数据结构来获得结果:
result = {}
for name, qty in zip(populate_name, populate_qty):
result[name] = result.get(name, 0) + int(qty)
name, qty = sorted(result.items(), key=lambda o: o[1])[-1]
那么你就得到了胜利者:
>>> print(name) # name
'jack'
>>> print(qty) # qty
6
答案 2 :(得分:0)
import operator
def max_populate(populate_name, populate_qty):
d = {}
for i in zip(populate_name, populate_qty):
if i in d:
d[i[0]] += i[1]
else:
d[i[0]] = i[1]
return max(d.iteritems(), key=operator.itemgetter(1))