从数组中删除重复项并添加值Python

时间:2019-11-15 09:31:35

标签: python arrays list

我有一个数组,存在于两列中。第一列是类别,第二列是值。例如下面的一个:

primeicons

我正在尝试创建一个数组,其中每个类别仅出现一次,并且将每个类别的所有值相加。

我应该如何开始呢?

3 个答案:

答案 0 :(得分:1)

您可以创建defaultdict并使用列表中的值更新字典,如下所示:

from collections import defaultdict
l = [['category1', 12], ['category2', 78], ['category3', 8], 
     ['category2', 53], ['category4', 894]]

d = defaultdict(int)
for cat, i in l:
    d[cat] += i

print(d)
defaultdict(int,
            {'category1': 12,
             'category2': 131,
             'category3': 8,
             'category4': 894})

如果您希望将其返回到list

list(map(list, d.items()))
# [['category1', 12], ['category2', 131], ['category3', 8], ['category4', 894]]

答案 1 :(得分:0)

如果要使用列表和迭代,可以像这样

lst = [['category1', 12], ['category2', 78], ['category3', 8], ['category2', 53], ['category4', 894]]

tmp = []
for item in lst:
  if item[0] in [i[0] for i in tmp]:    # to check if ithis category is already present in the new list 
    for itm in tmp:      # if yes, locate it and add the integer value
      if itm[0] == item[0]:
        itm[1] += item[1]
  else:     # if not, simply append that item to new list
    tmp.append(item)

print(tmp)

输出:

[['category1', 12], ['category2', 131], ['category3', 8], ['category4', 894]]

但是我必须说,dict技术更直观,并且在更长列表中的表现更好。

答案 2 :(得分:0)

您可以使用Pandas库来整理列表,

import pandas as pd

x = [['category1', 12], ['category2', 78], ['category3', 8], ['category2', 53], ['category4', 894]]
x = pd.DataFrame(x).pivot_table(index=[0], aggfunc='sum').reset_index().values.tolist()

使用此技术很有帮助,因为可以使aggfunc对于其他应用程序更加出色! :D

O / P

[['category1', 12], ['category2', 131], ['category3', 8], ['category4', 894]]