zoukankan      html  css  js  c++  java
  • Python序列删除重复数据

    ## 对于列表来说,若不保持原有顺序,可以直接转换为set删除重复数据

    1 nums = [1,2,32,2,2,4,3,2,3,42]
    2 nums = list(set(nums))
    3 print(nums)
    4 # [32, 1, 2, 3, 4, 42]  # 删除了重复数据,但是原有顺序也改变了

    ## 删除数据并保持原有顺序

     1 def dedupe(items, key=None):
     2     """
     3     items: 哈希或者不可哈希的序列
     4     key: 若items为不可哈希的序列(dict等)则需要指定一个函数
     5     """
     6     seen = set()
     7     for item in items:
     8         val = item if key is None else key(item)
     9         if val not in seen:
    10             yield item
    11             seen.add(val)
    12 
    13 nums = [1,2,32,2,2,4,3,2,3,42]
    14 print(list(dedupe(nums)))
    15 # [1, 2, 32, 4, 3, 42]
    16 
    17 students = [
    18     {"name": "Stanley", "score": 88},
    19     {"name": "Lily", "score": 92},
    20     {"name": "Bob", "score": 91},
    21     {"name": "Well", "score": 80},
    22     {"name": "Bob", "score": 90},
    23     {"name": "Peter", "score": 80}
    24 ]
    25 deduped_students = list(dedupe(students, key=lambda s: s['name']))
    26 print(deduped_students)
    27 """
    28 [{'name': 'Stanley', 'score': 88},
    29 {'name': 'Lily', 'score': 92},
    30 {'name': 'Bob', 'score': 91},
    31 {'name': 'Well', 'score': 80},
    32 {'name': 'Peter', 'score': 80}]   # 删除了相同姓名的元素
    33 """
    34 # 删除姓名和分数都相同的元素
    35 deduped_students = list(dedupe(students, key=lambda s: (s['name'], s['score'])))

    参考资料:
      Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).

  • 相关阅读:
    angular.element函数
    mknod创建命名管道(I/O缓存)
    谈谈sipXecs及其它【转】
    Linux下判断cpu物理个数、几核
    shell 中判断文件/文件夹是否存在
    一个人可以用Open IMS Core做什么呢
    linux 下更改磁盘名
    PPTP 服务器配置
    IP多媒体子系统[转维基百科]
    针对用编译的方式安装时的卸载
  • 原文地址:https://www.cnblogs.com/hycstar/p/9331059.html
Copyright © 2011-2022 走看看