Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从列表中删除重复项_Python_List_Duplicates - Fatal编程技术网

Python:从列表中删除重复项

Python:从列表中删除重复项,python,list,duplicates,Python,List,Duplicates,从文件中读取一些数据并对其进行排序后,我得到了这个 [['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', 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)
def创建账单(文件名、容量):
fob=打开(文件名)
newlst=list()
对于fob中的行:
a=行分割($)
b=[a[0],int(a[1])]
newlst.append(b)
打印(newlst)
newlst2=list()
对于范围内的i(len(newlst)):
n=i+1
当n

谢谢大家!

您可以使用dict,更具体地说是记录计数:

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)

您可以使用dict,更具体地说是一种记录计数的方法:

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)

这应该会给出你的答案

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 def out(a): x={name:0表示名称,a}中的值 对于名称,请使用以下格式中的值: x[name]=x[name]+值 最终=[] 对于我来说,在一个: 如果(i[0],x[i[0]])不是最终版本: final.append((i[0],x[i[0]])) 返回决赛 输出是
[('John',6),('Lisa',2),('Carly',4),('Zachary',1),('Brian',3)]

这应该会给你答案

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 def out(a): x={name:0表示名称,a}中的值 对于名称,请使用以下格式中的值: x[name]=x[name]+值 最终=[] 对于我来说,在一个: 如果(i[0],x[i[0]])不是最终版本: final.append((i[0],x[i[0]])) 返回决赛 输出是
[('John',6),('Lisa',2),('Carly',4),('Zachary',1),('Brian',3)]

如果你已经分离出了重复项,那么你就解决了你的问题!向我们展示您所做的工作,我们将能够帮助您。如果您已经隔离了重复项,那么您就解决了您的问题!向我们展示您所做的工作,我们将能够帮助您解决问题。问题是,虽然原始订单不存在,但您为什么需要保留原始订单?有什么具体原因吗?问题是,虽然原始订单不存在,但为什么需要保留原始订单?有什么特别的原因吗?这太棒了,先生!非常感谢你。但有一个问题,我如何才能让你的答案返回你打印的内容?例如,将某个值设为“['John',6],'Lisa',2],'Carly',4],'Zachary',1],'Brian',3]]”您只需将最后一行从
print
更改为
return
,假设您已将代码放入函数中。很抱歉,这并不完全起作用,输出将变成此OrderedDict([('John',6),('Lisa',2),('Carly',4),('Zachary',1),('Brian',3)]这是
d
,这是一个
OrderedDict
。最后一行通过
map(list,d.items())
将其转换为列表表示形式,但保留原始的
d
不变(如果您是这么想的…)。您可以使用
result=map(list,d.items())
来“使某物等于”它,或者只是在函数中返回它。这太棒了,先生!非常感谢你。但有一个问题,我如何才能让你的答案返回你打印的内容?例如,将某个值设为“['John',6],'Lisa',2],'Carly',4],'Zachary',1],'Brian',3]]”您只需将最后一行从
print
更改为
return
,假设您已将代码放入函数中。很抱歉,这并不完全起作用,输出将变成此OrderedDict([('John',6),('Lisa',2),('Carly',4),('Zachary',1),('Brian',3)]这是
d
,这是一个
OrderedDict
。最后一行通过
map(list,d.items())
将其转换为列表表示形式,但保留原始的
d
不变(如果您是这么想的…)。您可以使用
result=map(list,d.items())
来“使某物等于”它,或者只是在函数中返回它。