小ᶻ☡꙳ᵃⁱᵍᶜ꙳ 2024-09-10 23:27 采纳率: 100%
浏览 5
已结题

Python 数据处理时,我遇到了一个关于数据去重和分组的问题。

我尝试用 groupby 函数对数据进行分组,但输出结果与预期不符。在处理一个包含重复元素的列表时,我想去除重复元素并保持原有顺序,但是用了 set 后顺序被打乱了。

# 尝试用 set 去重但保持顺序的问题
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(my_list))  # 去重但顺序改变了
print(unique_list)

尝试的解决方案

我已经尝试过以下解决方案,但它们没有达到预期效果:

我尝试使用 sorted() 函数排序结果,但并不能恢复原来的顺序。
我查看了 Python 文档,尝试了用 collections.OrderedDict,但是不确定这样是否最优。

期望的结果

我希望能找到一种既能去重又能保持原有顺序的简洁方法。

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-10 23:28
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的需求确实比较特殊,既要保证数据去重又要保持原有顺序,确实比较棘手。在这里我会提供一种相对简洁的方法来解决这个问题,你可以使用Python的OrderedDict数据结构来实现。OrderedDict是Python的一个内置库,它可以记住元素的插入顺序。你可以通过以下步骤来实现你的需求:

    from collections import OrderedDict
    
    my_list = [1, 2, 2, 3, 4, 4, 5]
    unique_list = list(OrderedDict.fromkeys(my_list))  # 去重并保持原有顺序
    print(unique_list)
    

    这里的关键是OrderedDict的fromkeys方法,它会返回一个OrderedDict对象,其键是输入列表中的唯一元素,保持了输入列表中的顺序。然后我们可以通过list函数将这个OrderedDict对象转换为列表。这样我们就可以得到一个去重后且保持原有顺序的列表了。

    注意:这种方法只适用于Python 3.7及以上版本,因为在Python 3.7之前,OrderedDict并不能保证插入顺序。如果你的Python版本低于3.7,可能需要考虑升级Python版本或者使用其他方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月10日
  • 已采纳回答 9月10日
  • 创建了问题 9月10日