[英]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.