繁体   English   中英

Python:从列表中删除重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM