如何保留嵌套元组列表中字符串的首次出现项
如何保留列表中每个元组的首次出现项?
问题描述
我有如下列表:
d2 = [('PO:', [541, 297.5, 117, 14]), ('PD', [680, 297.5, 30, 12]), ('1/29/2021', [676, 317.5, 67, 14]), ('PDF:', [541, 317.5, 100, 14]), ('CSF-IPS', [204, 593.0, 357, 15]), ('1', [148, 593.0, 8, 14]), ('1', [148, 593.5, 8, 14]), ('10', [608, 593.5, 17, 14]), ('10', [608, 593.5, 17, 14]), ('20.00', [684, 593.5, 37, 14]), ('20.00', [684, 593.5, 37, 14]), ('200.00', [767, 593.5, 46, 14])]我需要仅保留每个元素的首次出现项,处理后的目标列表为:
[('PO:', [541, 297.5, 117, 14]), ('PD', [680, 297.5, 30, 12]), ('1/29/2021', [676, 317.5, 67, 14]), ('PDF:', [541, 317.5, 100, 14]), ('CSF-IPS', [204, 593.0, 357, 15]), ('1', [148, 593.0, 8, 14]), ('10', [608, 593.5, 17, 14]), ('20.00', [684, 593.5, 37, 14]), ('200.00', [767, 593.5, 46, 14])]我尝试提取d2中的键并编写for循环,但只能获取每个元组的第一个元素,无法获取第二个元素,请问该如何实现需求?
解决方案
其实你只需要在遍历的时候同时获取元组的键和值,然后用字典来记录已经出现过的键,这样就能轻松保留首次出现的完整元组了。
Python 3.7及以上版本的普通字典会保留插入顺序,刚好符合我们需要的顺序要求,具体实现代码如下:
d2 = [('PO:', [541, 297.5, 117, 14]), ('PD', [680, 297.5, 30, 12]), ('1/29/2021', [676, 317.5, 67, 14]), ('PDF:', [541, 317.5, 100, 14]), ('CSF-IPS', [204, 593.0, 357, 15]), ('1', [148, 593.0, 8, 14]), ('1', [148, 593.5, 8, 14]), ('10', [608, 593.5, 17, 14]), ('10', [608, 593.5, 17, 14]), ('20.00', [684, 593.5, 37, 14]), ('20.00', [684, 593.5, 37, 14]), ('200.00', [767, 593.5, 46, 14])] # 初始化空字典,用来存储首次出现的键值对 unique_items = {} # 遍历原列表中的每个元组,同时取出键和值 for key, value in d2: # 只有当键不在字典中时,才添加进去(保证只保留首次出现的项) if key not in unique_items: unique_items[key] = value # 将字典转换回元组列表,就是我们要的结果 result = list(unique_items.items()) print(result)
代码解释
- 遍历元组时用
key, value in d2,这样就能同时获取每个元组的第一个(键)和第二个(值)元素,解决你之前只能拿到键的问题。 - 字典的键具有唯一性,所以重复的键不会被再次添加,自然就保留了首次出现的对应值。
- 最后用
list(unique_items.items())把字典的键值对转回元组列表,顺序和原列表中首次出现的顺序完全一致。
内容的提问来源于stack exchange,提问作者user13074756
相关产品推荐
相关产品推荐

