[英]Python: Removing duplicates from a list
从文件中读取一些数据并对其进行排序后,我得到了。
[['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)
谢谢!
您可以使用字典,更具体地说是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^2)
复杂性。 字典方法采用O(N)
。
这应该给你答案。
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
输出为[('John',6),('Lisa',2),('Carly',4),('Zacharry',1),('Brian',3)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.