【问题标题】:How to remove duplicates in a list of lists, keeping the element with the highest value based on the second element in the list? Python如何删除列表列表中的重复项,根据列表中的第二个元素保留具有最高值的元素? Python
【发布时间】:2022-12-07 22:03:06
【问题描述】:

我有一个列表列表,列表的第一个条目中有重复项。我想删除重复项并只保留得分最高的项目(基于列表的第二个条目)

list_dup = [["Apple", 24],
["Apple", 23], 
["Sun", 15], 
["Apple", 2], 
["Sun", 1],
["Blue", 15]
]

输出:

list_dup = [["Apple", 24], 
    ["Sun", 15], 
    ["Blue", 15]
    ]

【问题讨论】:

    标签: python


    【解决方案1】:
    import pandas as pd
    pd.DataFrame(list_dup).groupby(0).max().reset_index().values.tolist()
    

    【讨论】:

      【解决方案2】:

      如果输出列表的顺序不重要,您可以使用 sorted 将列表排序为第一个值的组,然后使用 itertools.groupby 提取第一个元素。

      from itertools import groupby
      
      list_dup = [["Apple", 24],
      ["Apple", 23], 
      ["Sun", 15], 
      ["Apple", 2], 
      ["Sun", 1],
      ["Blue", 15]
      ]
      
      [next(g) for _, g in groupby(sorted(list_dup, reverse=True), key=lambda x: x[0])]
      # returns:
      [['Sun', 15], ['Blue', 15], ['Apple', 24]]
      

      【讨论】:

        【解决方案3】:

        许多可能性。最清楚的一个可能是:

        m_d = {}
        for k in list_dup:
            if k[0] in m_d:
                if m_d[k[0]] < k[1]:
                    m_d[k[0]] = k[1]
            else:
                m_d[k[0]] = k[1]
        
        list_no_dup = [[k, v] for k, v in m_d.items()]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-21
          • 1970-01-01
          • 1970-01-01
          • 2016-05-14
          • 2021-03-20
          • 1970-01-01
          • 2019-12-29
          相关资源
          最近更新 更多