簡體   English   中英

使用列表中包含的列表刪除重復的元組

[英]Remove duplicated tuples with included lists from list

我有一個元組列表:

managed_list = [ ('a', [1,2]), ('a', [1,2]), ('b', [2,2]), ('b', [2,2])]

需要得到:

managed_list = [ ('a', [1,2]), ('b', [2,2]) ]

嘗試:

seen = set()
[[n for n in x if n not in seen and not seen.add(n)] for x in managed_list]

得到:

TypeError: unhashable type: 'list'

是的,您不能在set使用包含list (或其他不可變類型)的list或結構。 在不改變輸入結構的情況下,可以使用itertools.groupby ,然后通過重復項丟棄迭代器:

import itertools
uniques = [x[0] for x in itertools.groupby(sorted(managed_list))]

順便說一句,如果它不是針對不可用的密鑰問題(例如,如果列表是元組),則表達式可以簡化為:

list(set(managed_list))

您不需要列表推導中的額外代碼。

您還可以使用collections.OrderedDict刪除重復的鍵。

>>> from collections import OrderedDict
>>> OrderedDict([ ('a', [1,2]), ('a', [1,2]), ('b', [2,2]), ('b', [2,2])]).items()
[ ('a', [1,2]), ('b', [2,2]) ]

請記住,在重復鍵的情況下,最右邊的條目將是輸出中包含的條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM