我是python的新手,并且需要以下建議。我有一個(gè)包含多個(gè)字段的文件,例如下面的示例# with duplicatesname1 14019 3 0.5564 0.0929 0.6494name1 14022 0 0.5557 0.0990 0.6547name1 14016 0 0.5511 0.0984 0.6495name2 11 8 0.5119 0.0938 0.6057name2 12 18 0.5331 0.0876 0.6206name3 16 20 0.5172 0.0875 0.6047name3 17 29 0.5441 0.0657 0.6098# without duplicatesname1 14022 0 0.5557 0.0990 0.6547name2 12 18 0.5331 0.0876 0.6206name3 17 29 0.5441 0.0657 0.6098首先是名稱,其他字段是數(shù)字(根據(jù)預(yù)測(cè))。有相同名稱但有不同預(yù)測(cè)的預(yù)測(cè)重復(fù)項(xiàng)。我的任務(wù)是根據(jù)最后一個(gè)字段的比較刪除重復(fù)項(xiàng)。最后一列應(yīng)為MAXIMUM。我正在堆疊比較重復(fù)項(xiàng)的最后一個(gè)字段的步驟。我應(yīng)該使用lambda還是可以進(jìn)行直接過濾?列表是否正確使用,或者在從文件中逐行讀取時(shí)可以在流程中執(zhí)行?您對(duì)我們的幫助深表感謝!import csvfi = open("filein.txt", "rb")fo = open("fileout.txt", "wb")reader = csv.reader(fi,delimiter=' ')writer = csv.writer(fo,delimiter=' ')names = set()datum = []datum2 = []for row in reader: if row[0] not in names: names.add(row[0]) row_new1 = [row[0],row[3],row[4],row[5]] datum.append(row_new) writer1.writerow(row_new1) else: row_new2 = [row[0],row[3],row[4],row[5]] datum2.append(row_new2) writer2.writerow(row_new2)
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
下面的代碼可能有一定用處,我是用字典來(lái)做的:
import csv
fi = open("filein.txt", "rb")
reader = csv.reader(fi,delimiter=' ')
dict = {}
for row in reader:
if row[0] in dict:
if float(dict[row[0]][-1]) < float(row[-1]):
dict[row[0]] = row[1:]
else:
dict[row[0]] = row[1:]
print dict
輸出:
{'name2': ['12', '18', '0.5331', '0.0876', '0.6206'], 'name3': ['17', '29', '0.5441', '0.0657', '0.6098'], 'name1': ['14022', '0', '0.5557', '0.0990', '0.6547']}
添加回答
舉報(bào)
0/150
提交
取消