2017-05-07 132 views
0

我有類似的列表,但其長度會有所不同,內容也是如此。我需要刪除元組中第一個位置的副本,但是我需要保持第二個位置的最高值。訂單並不重要,最終數據將按照第一或第二的位置進行排序,具體取決於哪個更需要。例如。爲2186.11將是80而不是49。請幫助:)根據最高值從元組列表中刪除重複項

[('2186.11', '49'), ('1251.67', '48'), ('1267.67', '26'), 
('1383.77', '824'), ('163.96', '29'), ('170.00', '29'), 
('170.72', '51'), ('2186.11', '80'), ('170.00', '22')] 

高清Remove_Duplicates(INFILE):

singles = [] 
test = [] 
for elem in infile: 
    if type(elem) == tuple: 
     test.append(elem[0]) 
     if not elem[0] in singles: 
      singles.append(elem) 
     if elem[0] in singles: 
      position = singles.index(elem) 
      if elem[1] > position[1]: 
       position[1] = elem[1] 
      else: 
       pass 
    else: 
     if not elem in singles: 
      singles.append(elem) 

return singles 

,這是我想出了一個代碼。但我得到了答案。感謝你們。

+2

您可以顯示這是你當前的代碼?解釋你目前遇到的困難/錯誤。請確保你編輯你的問題,以確保你把一個合適的[mcve]。 – idjaw

回答

2
>>> L=[('2186.11', '49'), ('1251.67', '48'), ('1267.67', '26'), ('1383.77', '824'), ('163.96', '29'), ('170.00', '29'), ('170.72', '51'), ('2186.11', '80'), ('170.00', '22')] 
>>> list(dict(sorted(L, key=lambda v: int(v[1]))).items()) 
[('2186.11', '80'), ('170.00', '29'), ('1267.67', '26'), ('1383.77', '824'), ('163.96', '29'), ('1251.67', '48'), ('170.72', '51')] 

按第二項的數值排序,然後轉換爲字典以刪除重複項並轉換回來。

1

假設我明白你在找什麼:

example = [('2186.11', '49'), ('1251.67', '48'), ('1267.67', '26'), ('1383.77', '824'), ('163.96', '29'), ('170.00', '29'), ('170.72', '51'), ('2186.11', '80'), ('170.00', '22')] 

example.sort(key=lambda x: int(x[1])) 
result = list(dict(example).items()) 
result 
[('1267.67', '26'), 
('163.96', '29'), 
('1383.77', '824'), 
('1251.67', '48'), 
('170.00', '29'), 
('170.72', '51'), 
('2186.11', '80')]