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())
来“使某物等于”它,或者只是在函数中返回它。