【问题标题】:Remove Items duplicate items from an array based on first entry根据第一个条目从数组中删除重复项
【发布时间】:2020-03-25 04:59:22
【问题描述】:

我知道从列表中删除重复项很容易,例如:

lst = ['a' , 'b' , 'c' , 'c' , 'd' , 'd' ]

通过使用方法:

lst = list(dict.fromkeys(lst))
#output
lst = ['a' , 'b' , 'c' , 'd']

但是,如果列表由 2 个元素列表组成,则此方法不起作用,如下所示:

lst = [['a','1'],['b','2'],['b','1'],['c','3'],['c','2']]

我想删除第一个元素重复的所有条目,留下第一个元素 无论第二个元素如何,都是每个实例。所以输出应该是:

lst = [['a','1'],['b','2'],['c','3']]

【问题讨论】:

  • 这能回答你的问题吗? Removing duplicates in lists
  • 您想从整个列表中删除重复项还是只删除连续的重复项,例如。对于lst=[['a',1], ['b',2], ['a',2], ['a',3]],结果将是[['a',1], ['b',2], ['a',2]]?
  • 我想删除第一个元素已经出现在列表中的任何条目。因此,对于您的示例,输出应为 [['a','1'],['b','2']]

标签: python python-3.x list duplicates slice


【解决方案1】:

你可以使用itertools.groupby:

import itertools as it

# use the lambda to group by the first index
# next(g) returns the first instance of the group

[next(g) for k, g in it.groupby(lst, key=lambda x: x[0])]

结果:

[['a', '1'], ['b', '2'], ['c', '3']]

【讨论】:

  • 值得注意的是,这需要对lst进行排序。
【解决方案2】:

你可以试试这个:

>>> lst = [['a','1'],['b','2'],['b','1'],['c','3'],['c','2']]
>>> dict(lst)
{'a': '1', 'b': '1', 'c': '2'}

>>> [k for k,_ in dict(lst).items()]
['a', 'b', 'c']

>>> [[k,v] for k,v in dict(lst).items()]
[['a', '1'], ['b', '1'], ['c', '2']]

【讨论】:

  • @GiacomoAlzetta 你确定吗?预期的输出清楚地表明应该保留第一对。
  • @RiccardoBucco 哦,我的错。谁写了一个序列增加的例子,然后只是交换最后一个只是为了欺骗别人。我会删除我的评论。
【解决方案3】:
lst = [['a', '1'], ['b', '2'], ['b', '1'], ['c', '3'], ['c', '2']]

d = {}
for tupl in lst:
    first = tupl[0]
    if first not in d:
        d[first] = tupl

print(list(d.values()))

输出:

[['a', '1'], ['b', '2'], ['c', '3']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多