在列表中添加元素值

时间:2015-06-20 23:10:26

标签: python list

我有两个列表

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个元素。

3 个答案:

答案 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内置函数zipdict数据结构来获得结果:

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