python – 从元组列表中删除重复项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从元组列表中删除重复项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3916字,纯文字阅读大概需要6分钟。
内容图文
![python – 从元组列表中删除重复项](/upload/InfoBanner/zyjiaocheng/733/75ce71491f41409483161a7cad900e1d.jpg)
我有一个元组列表,不幸的是包含重复项,如下所示:
[(67, u'top-coldestcitiesinamerica'), (66, u'ecofriendlyideastocelebrateindependenceday-phpapp'), (65, u'a-b-c-ca-d-ab-ea-d-c-c'), (64, u'a-b-c-ca-d-ab-ea-d-c-c'), (63, u'alexandre-meybeck-faowhatisclimate-smartagriculture-backgroundopportunitiesandchallenges'), (62, u'ghgemissions'), (61, u'top-coldestcitiesinamerica'), (58, u'infographicthe-stateofdigitaltransformationaltimetergroup'), (57, u'culture'), (55, u'cas-k-ihaveanidea'), (54, u'trendsfor'), (53, u'batteryimpedance'), (52, u'evs-howey-full'), (51, u'bericht'), (49, u'classiccarinsurance'), (47, u'uploaded_file'), (46, u'x_file'), (45, u's-s-main'), (44, u'vehicle-propulsion'), (43, u'x_file')]
问题是元组的第一个元素(基于0的排序)是我想要检查重复的条目.所以,我可以看到:
(67, u'top-coldestcitiesinamerica')
(61, u'top-coldestcitiesinamerica')
..重复,我想删除其中一个(类似于一组).所以,最后,我想有一个干净的元组列表,没有像这样重复的元组(即元组的第一个元素没有重复):
[(67, u'top-coldestcitiesinamerica'), (66, u'ecofriendlyideastocelebrateindependenceday-phpapp'), (65, u'a-b-c-ca-d-ab-ea-d-c-c') (63, u'alexandre-meybeck-faowhatisclimate-smartagriculture-backgroundopportunitiesandchallenges'), (62, u'ghgemissions'), (58, u'infographicthe-stateofdigitaltransformationaltimetergroup'), (57, u'culture'), (55, u'cas-k-ihaveanidea'), (54, u'trendsfor'), (53, u'batteryimpedance'), (52, u'evs-howey-full'), (51, u'bericht'), (49, u'classiccarinsurance'), (47, u'uploaded_file'), (46, u'x_file'), (45, u's-s-main'), (44, u'vehicle-propulsion')]
我怎样才能以pythonic方式实现这一目标?
谢谢!
解决方法:
您可以使用How do you remove duplicates from a list in whilst preserving order?中的set方法,使用x [1]作为唯一标识符:
def unique_second_element(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x[1] in seen or seen_add(x[1]))]
请注意,如果要保留最后一次出现,也会显示OrderedDict方法.对于第一次出现,您必须反转输入然后再次反转输出.
您可以通过支持关键功能使其更加通用:
def unique_preserve_order(seq, key=None):
if key is None:
key = lambda elem: elem
seen = set()
seen_add = seen.add
augmented = ((key(x), x) for x in seq)
return [x for k, x in augmented if not (k in seen or seen_add(k))]
然后用
import operator
unique_preserve_order(yourlist, key=operator.itemgetter(1))
演示:
>>> def unique_preserve_order(seq, key=None):
... if key is None:
... key = lambda elem: elem
... seen = set()
... seen_add = seen.add
... augmented = ((key(x), x) for x in seq)
... return [x for k, x in augmented if not (k in seen or seen_add(k))]
...
>>> from pprint import pprint
>>> import operator
>>> yourlist = [(67, u'top-coldestcitiesinamerica'), (66, u'ecofriendlyideastocelebrateindependenceday-phpapp'), (65, u'a-b-c-ca-d-ab-ea-d-c-c'), (64, u'a-b-c-ca-d-ab-ea-d-c-c'), (63, u'alexandre-meybeck-faowhatisclimate-smartagriculture-backgroundopportunitiesandchallenges'), (62, u'ghgemissions'), (61, u'top-coldestcitiesinamerica'), (58, u'infographicthe-stateofdigitaltransformationaltimetergroup'), (57, u'culture'), (55, u'cas-k-ihaveanidea'), (54, u'trendsfor'), (53, u'batteryimpedance'), (52, u'evs-howey-full'), (51, u'bericht'), (49, u'classiccarinsurance'), (47, u'uploaded_file'), (46, u'x_file'), (45, u's-s-main'), (44, u'vehicle-propulsion'), (43, u'x_file')]
>>> pprint(unique_preserve_order(yourlist, operator.itemgetter(1)))
[(67, u'top-coldestcitiesinamerica'),
(66, u'ecofriendlyideastocelebrateindependenceday-phpapp'),
(65, u'a-b-c-ca-d-ab-ea-d-c-c'),
(63,
u'alexandre-meybeck-faowhatisclimate-smartagriculture-backgroundopportunitiesandchallenges'),
(62, u'ghgemissions'),
(58, u'infographicthe-stateofdigitaltransformationaltimetergroup'),
(57, u'culture'),
(55, u'cas-k-ihaveanidea'),
(54, u'trendsfor'),
(53, u'batteryimpedance'),
(52, u'evs-howey-full'),
(51, u'bericht'),
(49, u'classiccarinsurance'),
(47, u'uploaded_file'),
(46, u'x_file'),
(45, u's-s-main'),
(44, u'vehicle-propulsion')]
内容总结
以上是互联网集市为您收集整理的python – 从元组列表中删除重复项全部内容,希望文章能够帮你解决python – 从元组列表中删除重复项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。