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