zoukankan      html  css  js  c++  java
  • 字典-dict

    1. dict

       字典是Python提供的一种数据类型,用于存放有映射关系的数据,字典相当于两组数据,其中一组是key,是关键数据(程序对字典的操作都是基于key),

       另一组数据是value,可以通过key来进行访问。

       列出一些常用的API:

    dict.clear()                         # 删除字典内所有元素 
    dict.copy()                          # 返回一个字典的浅复制
    dict.items()                         # 以列表返回可遍历的(键, 值)元组数组
    dict.keys()                          # 以列表返回一个字典所有的键
    dict.values()                        # 以列表返回字典中的所有值
    dict.get(key, default=None)          # 返回指定键的值,如果值不在字典中返回default值
    dict.setdefault(key, default=None)   # 和get()类似, 如果键不存在于字典中,将会添加键并将值设为default。如果字典中包含该键,则返回该键对应的值,否则返回为该键设置的值。
    dict.update(dict2)                   # 把字典dict2的键/值对更新到dict里
    dict.popitem()                       # 返回并删除字典中的最后一对键和值
    dict.pop(key[,default])              # 删除字典给定键 key 及对应的值,返回值为被删除的值
    dict.fromkeys(seq[, val])            # 创建一个新字典,以序列 seq 中元素做字典的键,val为字典所有键对应的初始值
    len(dict)                            # 计算字典元素个数,即键的总数
    cmp(dict1, dict2)                    # 比较两个字典元素
    

       下面举几个例子:

    d = {}   # d = dict()
    d.setdefault('a', []).append(1)
    d.setdefault('a', []).append(2)
    d.setdefault('b', []).append(4)
    print(d)
    
    # 通过 in 或 not in 运算符判断字典是否包含指定的 key
    print('a' in d)
    
    e = d.copy()
    e.clear()
    print(e)
    
    # 获取元素
    print(d.get('a'))
    print(d['a'])
    print(d.get('c'))
    print(list(d.items()))
    print(list(d.keys()))
    print(list(d.values()))
    
    g = d.popitem()
    print(g)
    print(d)
    
    h = dict(k1 =1, k2 = 2)
    d.update(h)
    print(d)
    print(d.pop('k1'))
    
    # 由元组生成字典
    headers = ['name', 'shares', 'price']
    values = ['ACME', 100, 490.1]
    s = dict(zip(headers,values))
    print(s)

       dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。默认情况下,dict迭代的是key。

    d = {'d': 1, 'b': 2, 'c': 3}
    for key in d:
        print(key)
    

       如果要迭代value,可以这么做:

    d = {'d': 1, 'b': 2, 'c': 3}
    for value in d.values():
        print(value)
    

       同时迭代key和value,可以这么做:

    d = {'d': 1, 'b': 2, 'c': 3}
    for k, v in d.items():
        print(k, v)

    2. defaultdict

       使用defaultdict为字典的每个key设置默认值,当访问的key不存在时,该字典不会报错,而是会返回设置的默认值。

    from collections import defaultdict
    
    d = defaultdict(list)
    print(d['a'])   # 输出[]

       可以使用 defaultdict 来创建一个多值映射字典,即 value 是容器类型,免去初始化的麻烦。

    3. OrderedDict

       为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的 OrderedDict 类。在迭代操作的时候它会保持元素被插入时的顺序。

    from collections import OrderedDict
    
    d = OrderedDict()
    d['foo'] = 1
    d['bar'] = 2
    d['spam'] = 3
    d['grok'] = 4
    
    # Outputs "foo 1", "bar 2", "spam 3", "grok 4"
    for key in d:
        print(key, d[key])
    

       测试的时候发现 dict 其实也是按插入顺序输出的,不知道是不是python3做出的更改。

    4. 字典推导式

       字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。直接举例说明:

    prices = {
        'ACME': 45.23,
        'AAPL': 612.78,
        'IBM': 205.55,
        'HPQ': 37.20,
        'FB': 10.75
    }
    
    p = { key: value for key, value in prices.items() if value > 200 }
    print(p)
    

      

  • 相关阅读:
    Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
    Java实现蓝桥杯勇者斗恶龙
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 224 基本计算器
    Java实现 LeetCode 224 基本计算器
  • 原文地址:https://www.cnblogs.com/yanghh/p/13187285.html
Copyright © 2011-2022 走看看