免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5750 | 回复: 8
打印 上一主题 下一主题

如何删除list中重复的dict [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-07 10:51 |只看该作者 |倒序浏览
例如
a = [{'name':zhang, 'age':18}, {'name':zhang, 'age':18}, {'name':li, 'age':18}]
前两个重复了,如何删除一个

论坛徽章:
0
2 [报告]
发表于 2014-11-07 11:05 |只看该作者
  1. from itertools import *

  2. l = [{'name':zhang, 'age':18}, {'name':zhang, 'age':18}, {'name':li, 'age':18}]
  3. for d1, d2 in combinations(l, 2):
  4.     a = list(set(d1.items())^set(d2.items()))
  5.     if len(a) == 0:
  6.         i = l.index(d1)
  7.         l.pop(i)
复制代码

论坛徽章:
3
天秤座
日期:2014-10-29 11:37:572015元宵节徽章
日期:2015-03-06 15:50:39NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2014-11-07 11:17 |只看该作者
楼主是不是应该写成
a = [{'name':‘zhang’, 'age':18}, {'name':‘zhang’, 'age':18}, {'name':‘li’, 'age':18}]

论坛徽章:
3
天秤座
日期:2014-10-29 11:37:572015元宵节徽章
日期:2015-03-06 15:50:39NBA常规赛纪念章
日期:2015-05-04 22:32:03
4 [报告]
发表于 2014-11-07 11:35 |只看该作者
本帖最后由 tomer 于 2014-11-07 12:01 编辑

  1. a = [{'name':'zhang', 'age':18}, {'name':'zhang', 'age':18}, {'name':'li', 'age':18},{'name':'zhang', 'age':18}]
  2. for i in range(0,len(a)-1):
  3.     for j in range(1,len(a)-1):
  4.         if a[i]==a[j]:
  5.             a.pop(j)
  6. print(a)
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-11-07 12:03 |只看该作者
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. l = [{'name':'zhang', 'age':18}, {'name':'zhang', 'age':18}, {'name':'li', 'age':18}]
  4. print [dict(t) for t in set([tuple(d.items()) for d in l])]
复制代码
从这里抄袭来的
http://stackoverflow.com/questions/9427163/remove-duplicate-dict-in-list-in-python

论坛徽章:
3
天秤座
日期:2014-10-29 11:37:572015元宵节徽章
日期:2015-03-06 15:50:39NBA常规赛纪念章
日期:2015-05-04 22:32:03
6 [报告]
发表于 2014-11-07 14:22 |只看该作者
本帖最后由 tomer 于 2014-11-07 14:23 编辑

  1. [root@VM ~]# more file.py
  2. a = [{'name':'zhang', 'age':18}, {'name':'zhang', 'age':18}, {3},{'name':'li', 'age':18},{'name':'zhang', 'age':18},{3},{8}]
  3. b=[]
  4. j=0
  5. for i in range(1,len(a)):
  6.     if a[j]==a[i]:
  7.        b.append(a[i])
  8.        j=j+1
  9. for key in b:
  10.     a.remove(key)
  11. print(a)
  12. [root@VM ~]# python file.py
  13. [{'name': 'li', 'age': 18}, {'name': 'zhang', 'age': 18}, {3}, {8}]

复制代码

论坛徽章:
0
7 [报告]
发表于 2014-11-07 15:36 |只看该作者
  1. >>> b=[{3},{8}]
  2. >>> b
  3. [{3}, {8}]
  4. >>> for i in b:print(type(i))

  5. <class 'set'>
  6. <class 'set'>
  7. >>> c={3}
  8. >>> c
  9. {3}
  10. >>> type(c)
  11. <class 'set'>
  12. >>> d=[{'name':'zhang','age':18},{3},{8}]
  13. >>> d
  14. [{'name': 'zhang', 'age': 18}, {3}, {8}]
  15. >>> type(d)
  16. <class 'list'>
  17. >>> for i in d:print(type(i))

  18. <class 'dict'>
  19. <class 'set'>
  20. <class 'set'>
  21. >>>
复制代码

论坛徽章:
0
8 [报告]
发表于 2014-11-12 10:24 |只看该作者
a = [{'name':'zhang', 'age':18}, {'name':'zhang', 'age':18}, {'name':'li', 'age':18}]
list=[]
[list.append(x) for x in a if x not in list]
print(list)

论坛徽章:
0
9 [报告]
发表于 2014-11-12 15:42 |只看该作者
本帖最后由 kyrie_liu 于 2014-11-12 15:47 编辑

def delRepElem(List):
    if List:
        List.sort()
    Last = List[-1]
    for i in range(len(List)-2,-1,-1):
        if Last == List [ i ]:
            del List [ i ]
        else:
            Last = List [ i ]
    return List
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP