从文件中读取一些数据并对其进行分类后,我就明白了。
[['John', 1], ['Lisa', 2], ['Carly', 2], ['Zacharry', 1], ['Brian', 3], ['John', 5], ['Carly', 2]]
如何删除重复项,同时添加它们的值,以便我的输出看起来像这样
[['John', 6], ['Lisa', 2], ['Carly', 4], ['Zacharry', 1], ['Brian', 3]]
我已经能够将重复项与数据的总和相隔离,但是我不知道如何获得我想要的输出。
注意:在我的情况下,列表的顺序很重要,我的数据保留在列表中
当我分离出重复项时,我得到了这个输出:
[['John', 6], ['Carly', 4]]
我的代码:
def create_bills(filename, capacity):
fob = open(filename)
newlst = list()
for line in fob:
a = line.split(" $")
b = [a[0], int(a[1])]
newlst.append(b)
print(newlst)
newlst2 = list()
for i in range(len(newlst)):
n = i + 1
while n < len(newlst):
if newlst[i][0] == newlst[n][0]:
newlst2.append([newlst[i][0], (newlst[i][1] + newlst[n][1])])
n += 1
newlst3 = list()
for i in range(len(newlst)):
pass
print(newlst2)
谢谢!
答案 0 :(得分:3)
您可以使用dict,更具体地说是OrderedDict
来跟踪计数:
from collections import OrderedDict
lst = [['John', 1], ['Lisa', 2], ['Carly', 2], ['Zacharry', 1], ['Brian', 3], ['John', 5], ['Carly', 2]]
d = OrderedDict()
for k, v in lst:
if k not in d:
d[k] = v
else:
d[k] += v
print map(list, d.items())
#[['John', 6], ['Lisa', 2], ['Carly', 4], ['Zacharry', 1], ['Brian', 3]]
除了代码可读性问题之外,重要的是要注意,如果您在列表中维护计数,则需要O(N^2)
复杂度,就像原始代码所做的那样。字典方法需要O(N)
。
答案 1 :(得分:1)
这应该给你答案。
def out(a): x={name:0 for name,value in a} for name,value in a: x[name]=x[name]+value final=[] for i in a: if (i[0],x[i[0]]) not in final: final.append((i[0],x[i[0]])) return final
输出是 [(&#39; John&#39;,6),(&#39; Lisa&#39;,2),(&#39; Carly&#39;,4),(&#39; Zacharry&#39;, 1),(&#39; Brian&#39;,3)]