我有一个数组,存在于两列中。第一列是类别,第二列是值。例如下面的一个:
primeicons
我正在尝试创建一个数组,其中每个类别仅出现一次,并且将每个类别的所有值相加。
我应该如何开始呢?
答案 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]]