python列表去重_Python嵌套列表去重

博客讲述了在处理列表嵌套去重时遇到的问题,原始列表中存在重复的嵌套列表,要求保持顺序不变。作者尝试使用set进行去重,但set的无序性导致顺序变化。为解决排序问题,作者利用`sort`方法结合`key`参数,通过`raw_list.index`获取元素在原始列表中的位置进行排序,最终实现了按原始顺序去重的目标。
摘要由CSDN通过智能技术生成

人生苦短

早用Python

3eff6fbd0adc

这是工作中遇到的一个坑,首先看一下问题

raw_list = [["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"], ["百度", "CPY"]]

列表嵌套了列表,并且有一个重复列表["百度", "CPY"],现在要求将这个重复元素进行去重(重复是指嵌套的列表内两个元素都相同),并且保证元素顺序不变,输出还是嵌套列表,即最后结果应该长这样:[["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"]]

正常Python去重都是使用set,所以我这边也是用这种思想处理一下

In [8]: new_list = [list(t) for t in set(tuple(_) for _ in raw_list)]

In [9]: new_list

Out[9]: [['京东', 'CPY'], ['百度', 'CPY'], ['黄轩', 'PN']]

=。=以为大功告成,结果发现嵌套列表顺序变了

好吧一步步找一下是从哪边顺序变了的

In [10]: s = set(tuple(_) for _ in raw_list)

In [11]: s

Out[11]: {('京东', 'CPY'), ('百度', 'CPY'), ('黄轩', 'PN')}

恍然大悟关于set的两个关键词:无序 和 不重复 =。=

所以从set解决排序问题基本无望了,然而我还没有放弃,现在问题就变成了对于new_list怎么按照raw_list元素顺序排序,当然肯定要通过sort实现

翻一下Python文档找到以下一段话

文档地址

sort(*, key=None, reverse=False)

This method sorts the list in place, using only < comparisons between

items. Exceptions are not suppressed - if any comparison operations

fail, the entire sort operation will fail (and the list will likely be left in a

partially modified state).

[`sort()`](https://docs.python.org/3/library/stdtypes.html?highlight=sort#list.sort "list.sort")

accepts two arguments that can only be passed by keyword ( [keyword-only arguments](https://docs.python.org/3/glossary.html#keyword-only-parameter) ):

key specifies a function of one argument that is used to extract a

comparison key from each list element (for example, key=str.lower).

The key corresponding to each item in the list is calculated once and then used for the entire sorting process. The default value of None

means that list items are sorted directly without calculating a separate

key value.

开始划重点:

sort方法通过参数key指定一个方法,换句话说,key参数的值是函数。

这个函数和new_list上的每个元素会产生一个结果,sort通过这个结果进行排序。

于是这里就想到求出new_list里的每一个元素在raw_list里的索引,根据这个索引进行排序。

代码实现如下:

In [13]: new_list.sort(key=raw_list.index)

In [14]: new_list

Out[14]: [['百度', 'CPY'], ['京东', 'CPY'], ['黄轩', 'PN']]

结果和期望一样 =。=

Python中,可以使用多种方法对字典列表进行去重。下面是两种常见的方法: 一、使用for循环实现字典列表去重 ```python list_dict = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 30}, {'name': 'Alice', 'age': 20}] unique_list = [] for data in list_dict: if data not in unique_list: unique_list.append(data) print(unique_list) ``` 在这种方法中,我们创建了一个空列表unique_list来存放去重后的字典元素。然后,使用for循环遍历原始字典列表,并判断每个字典元素是否已经在unique_list中。如果字典元素不在unique_list中,则将其添加到unique_list中。 二、使用列表推导式去重 ```python list_dict = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 30}, {'name': 'Alice', 'age': 20}] unique_list = [dict(t) for t in {tuple(d.items()) for d in list_dict}] print(unique_list) ``` 在这种方法中,我们使用了嵌套列表推导式。首先,使用`{tuple(d.items()) for d in list_dict}`删除重的字典元素,并将其转换为元组。然后,使用``将这些元组转换回字典,并创建一个新的列表unique_list。 综上所述,以上是两种常见的方法来对Python中的字典列表进行去重。您可以根据具体需求选择合适的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python 列表去重的5种方式](https://blog.csdn.net/dangai0201/article/details/127799609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [python去重列表中相同的字典元素](https://blog.csdn.net/m0_45888058/article/details/130661182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值