2017-05-07 100 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')]