名单

时间:2017-06-26 15:30:49

标签: python

我有这个列表清单(已按名称排序):

[['Argo',2],['Argo',9],['Gim',1],['Gim',7],['Sam',10]]

我想要这个输出(具有相对总和的唯一名称):

[['Argo',11],['Gim',8],['Sam',10]]

列表列表将更新...因此不是列表的有限列表。可以有三个以上的名称,每个名称可以有两个以上的数字,例如:

 [['Argo',2],['Argo',9],['Argo',20],['Gim',1],['Gim',7],['Sam',10],['Ted',10],['Ted',10]]

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

from collections import defaultdict
d = defaultdict(int)

people = [["Argo",2],["Argo",9],["Gim",1],["Gim",7],["Sam",10]]

for i in people:
   d[i[0]] += i[1]

for i in d:
   the_sum = d[i]
   d[i] = the_sum/float([b[0] for b in people].count(i))

new_list = [[a, b] for a, b in d.items()]

new_val = sorted(new_list, key=lambda x: x[0])

通过使用defaultdict,您可以在循环people时更新与每个人关联的值。 输出:

[['Argo', 5.5], ['Gim', 4.0], ['Sam', 10.0]]

答案 1 :(得分:0)

您可以创建一个字典来对值进行求和并将其写回列表列表(如果您真的需要它作为列表)

name_dict = dict()

for l in your_list:
    if l[0] in name_dict:
            name_dict[1] += l[1]
        else:
            name_dict[1] = l[1]