J C*_*ena 3 python list duplicates
我有一个包含元组列表的列表,如下所示.
mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
Run Code Online (Sandbox Code Playgroud)
我想从中删除重复的元组mylist并获得如下输出.
mylist = [['xxx', 879], ['yyy', 315], ['zzz', 171]]
Run Code Online (Sandbox Code Playgroud)
好像set在python中它不起作用.
mylist = list(set(mylist))
Run Code Online (Sandbox Code Playgroud)
有没有快速简便的方法在python中执行此操作(可能使用库)?
您需要编写保留第一个子列表的代码,其余部分删除。执行此操作的最简单方法是反转mylist,将其加载到dict对象中,然后再次将其键值对作为列表检索。
>>> list(map(list, dict(mylist).items()))
Run Code Online (Sandbox Code Playgroud)
或者,使用列表推导 -
>>> [list(v) for v in dict(mylist).items()]
Run Code Online (Sandbox Code Playgroud)
[['zzz', 171], ['yyy', 315], ['xxx', 879]]
Run Code Online (Sandbox Code Playgroud)
请注意,此答案不维护顺序!另外,如果您的子列表可以包含两个以上的元素,那么最好的方法就是像@JohnJosephFernandez的回答所示的那样,对数据的郁金香化版本进行哈希处理。
看来您想保留订单。在这种情况下,您可以保留一个集合,以跟踪添加了哪些列表。
这是一个例子:
mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
# set that keeps track of what elements have been added
seen = set()
no_dups = []
for lst in mylist:
# convert to hashable type
current = tuple(lst)
# If element not in seen, add it to both
if current not in seen:
no_dups.append(lst)
seen.add(current)
print(no_dups)
Run Code Online (Sandbox Code Playgroud)
哪些输出:
[['xxx', 879], ['yyy', 315], ['zzz', 171]]
Run Code Online (Sandbox Code Playgroud)
注意:由于列表不可散列,因此可以将元组添加到seen集合中。
您无法执行此操作的原因是因为您有一个列表列表而不是元组列表.
你能做的是:
mytuplelist = [tuple(item) for item in mylist]
mylist = list(set(mytuplelist))
Run Code Online (Sandbox Code Playgroud)
要么
mylist = list(set(map(tuple, mylist)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4122 次 |
| 最近记录: |