zoukankan      html  css  js  c++  java
  • Python字典常用操作

    # 整理自Python Cookbook

    1. 保持字典有序

    可以使用collections模块中的OrderedDict类,对字典做迭代时会严格按照元素的添加顺序进行。

    from collections import OrderedDict

    d = OrderedDict()
    d['foo'] = 1
    d['bar'] = 2
    d['spam'] = 4

    for key, value in d.items():
    print(key,value)
    # Outputs
    foo 1
    bar 2
    spam 4
    OrderedDict 内部维护了一个双向链表,会根据元素加入顺序来排列键的位置。在构建此数据结构时应考虑维护链表导致额外的内存开销。
    2.字典计算
    求字典中值的最大最小值
    1)利用zip()
    prices = {
    'ACME' : 45.23,
    'AAPLL' : 612.78,
    'IBM' : 205.55
    }
    print(min(zip(prices.values(),prices.keys())))
     
    利用zip()将字典的键和值反转过来,再利用min(),max()求得即可
    zip()返回的是一个iterator内容只可以消费一次
    2)利用min(), max()的参数key
    在字典上执行常见的数据操作时会发现它们只会处理键,而不是值
    min(prices, key=lambda k: prices[key])
    # Outputs
    'ACME'
    3. 两字典间提取相同键/值
    a = {
    'x': 1,
    'y': 2,
    'z': 3
    }
    b = {
    'w': 10,
    'x': 11,
    'y': 2
    }
    print(a.keys() & b.keys())
    print(a.keys()-b.keys())
    字典实际上就是一些列键和值之间的映射的集合,所以字典支持常见的集合操作,如求交,并,差
    但字典的values()方法并不支持集合操作。
    4. 通过公共键对字典列表排序
    operator.itemgetter函数可以简单的实现要求
    rows = sorted(rows, key=itemgetter('lname', 'fname'))
    rows = sorted(rows, key=lambda r: (r['lname'].r['fname']))
    两种方式都能正常工作,但通常itemgetter()会运行得更快
    此方法对min(),max()同样适用
    5. 根据字段将字典列表分段
    itertools.groupby()函数对数据分组非常有效
    rows.sort(key=itmegetter('name'))
    for date,items in groupby(rows, key=itemgetter('date')):
      print(date)
      for i in items:
        print(' ', i)
    groupby()函数通过扫描序列找到拥有相同值(或者参数key指定的函数所返回的值)的序列项,并将它们分组,创建了一个迭代器,每次迭代返回一个值(value)和一个子迭代器(sub_iterator)
    子迭代器可产生所有在该分组内具有该值的项.
    groupy()只能检查连续的项,所以使用前必须进行排序。
    6. 字典中提取子集
    prices = {
    'ACME' : 45.23,
    'AAPLL' : 612.78,
    'IBM' : 205.55
    }
    p1 = {key:value for key, value in prices.items() if value >200}
    print(p1)
    也可创建元组序列然后调用dict()来得到,但没有前者清晰也没有前者快
     
  • 相关阅读:
    ie浏览器下载附件中文乱码
    js 获取字符串中某字符第二次出现的下标
    uploadify附件上传 传参
    hibernate hql语句 注意事项
    违反检查约束条件
    xml中的<if>和截取字符串
    引用不了XXservice,怎么办?
    enctype="multipart/form-data"的form传参
    freemarker 嵌套循环 (导出word时,修改ftl模板)
    springboot 打包问题 项目依赖三方jar ,之前的同事是直接丢到项目lib下 ,今天使用springbioot打包的时候,找不到这个jar
  • 原文地址:https://www.cnblogs.com/QiLF/p/9470654.html
Copyright © 2011-2022 走看看