如何在列表中删除重复项(python)
biglist =
[
{'title':'U2 Band','link':'u2.com'},
{'title':'ABC Station','link':'abc.com'},
{'title':'Live Concert by U2','link':'u2.com'}
]
我想要删除列表中的第三个元素,因为它有一个重复的“u2.com”。我不想要重复的“链接”元素。有什么最有效的代码可以做到这一点,让结果变成这样:
biglist =
[
{'title':'U2','link':'u2.com'},
{'title':'ABC','link':'abc.com'}
]
我试过很多方法,包括使用很多嵌套的“for ...in ...”,但是这样效率很低,而且代码太长了。
5 个回答
3
创建一个新的字典,使用 'u2.com' 和 'abc.com' 作为键,而你的列表元素作为值。这个字典会确保每个值都是唯一的。可以像这样做:
uniquelist = dict((element['link'], element) for element in reversed(biglist))
这里的反转是为了确保列表中的第一个元素会保留在字典中。如果你去掉这个反转,那么你得到的将是最后一个元素。
然后你可以像这样把元素重新放回列表:
biglist = uniquelist.values()
8
如果你有一个非常大的列表,并且想要保留剩下的项目的确切顺序,可能最快的方法就是下面这个...:
biglist = [
{'title':'U2 Band','link':'u2.com'},
{'title':'ABC Station','link':'abc.com'},
{'title':'Live Concert by U2','link':'u2.com'}
]
known_links = set()
newlist = []
for d in biglist:
link = d['link']
if link in known_links: continue
newlist.append(d)
known_links.add(link)
biglist[:] = newlist
2
你可以通过每个字典里的 link
字段来对列表进行排序,然后再遍历这个列表一次,去掉重复的项(或者说,创建一个新的列表,把重复的项去掉,这在Python中是常见的做法),像这样:
# sort the list using the 'link' item as the sort key
biglist.sort(key=lambda elt: elt['link'])
newbiglist = []
for item in biglist:
if newbiglist == [] or item['link'] != newbiglist[-1]['link']:
newbiglist.append(item)
这段代码会给你每组“重复项”中的第一个元素(在原始的 biglist
中的相对顺序)。这是因为Python使用的 .sort()
算法是稳定的排序算法——它不会改变被认为是相等的元素的顺序(在这里,就是那些 link
相同的元素)。