从基于某个值的元组列表中删除重复项

2024-09-28 16:48:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个格式的元组列表(float,string)。如何从列表中删除具有相同浮点值的重复项?在

列表按浮点数降序排序。我想维持秩序。在

[(0.10507038451969995,
  'Deadly stampede in Shanghai - Emergency personnel help victims.'),
 (0.078586381821416265,
  'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'),
 (0.072031446647399661, '- Emergency personnel help victims.'),
 (0.072031446647399661, 'Emergency personnel help victims.')]

看看最后两个。在


Tags: in列表string格式helpfloat浮点元组
3条回答

您可以使用itertools.groupby,因为已经对这些值进行了排序。数据如下:

>>> lot
[(0.10507038451969995, 'Deadly stampede in Shanghai - Emergency personnel help victims.'), 
(0.07858638182141627, 'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'), 
(0.07203144664739966, '- Emergency personnel help victims.'), 
(0.07203144664739966, 'Emergency personnel help victims.')]

演示:

^{pr2}$

这将为您提供分组在一起的第一个值。在

>>> L = [(0.10507038451969995, 'Deadly stampede in Shanghai - Emergency personnel help victims.'),
...  (0.078586381821416265, 'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'),
...  (0.072031446647399661, '- Emergency personnel help victims.'),
...  (0.072031446647399661, 'Emergency personnel help victims.')]

>>> from collections import OrderedDict
>>> OrderedDict(L).items()
[(0.10507038451969995, 'Deadly stampede in Shanghai - Emergency personnel help victims.'),
 (0.07858638182141627, 'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'),
 (0.07203144664739966, 'Emergency personnel help victims.')]

只有值不在seen中时,才能创建一组可见值并添加元组:

>>> lst
[(0.10507038451969995,
 'Deadly stampede in Shanghai - Emergency personnel help victims.'),
 (0.078586381821416265,
 'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'),
 (0.072031446647399661, '- Emergency personnel help victims.'),
 (0.072031446647399661, 'Emergency personnel help victims.')]

>>> seen = set()
>>> result = []
>>> for a, b in lst:
...    if not a in seen:
...        seen.add(a)
...        result.append((a, b))
>>> print result

[(0.10507038451969995, 'Deadly stampede in Shanghai - Emergency personnel help victims.'), 
 (0.07858638182141627, 'Deadly stampede in Shanghai - Police and medical staff help injured people after the stampede.'),  
 (0.07203144664739966, '- Emergency personnel help victims.')]

这里有另一种理解方法:

^{pr2}$

相关问题 更多 >