zoukankan      html  css  js  c++  java
  • 字典?月老,千里姻缘一线牵


    字典
    Python标准类型层次结构中映射类型的实现,以关键字为索引,使用关键字存储和解析值(读写值)
    形如 {key:value, ...},是一个键值对的集合
    键必须唯一且是不可变类型,值可以是任意Python类型

    键必须是可hash,一般使用字符串或数字作为键
    # 注意字典的键也叫关键字和Python语法中关键字不一样

    字典创建和对应的增删改查
    创建
    创建一个空字典
    {}
    dict()
    # 创建空字典
    names = {}
    print(names)
    
    # 等价于
    names = dict()
    print(names)
            创建一个有初始值的字典
    dict(key=value, ...) # 只有在键为字符串时候使用
    dict([(key, value), ...])
        # 其实是dict.items()的反转形式,用元组表示列表元素描叙key:value对

    使用可迭代对象作为字典的key,统一设置一个一样的初始值value
    {}.fromkeys(iterable[, value])
    # 有初始值的字典, 爱好 hobby
    user = dict(name="北门吹雪", age=18, hobby="reader")
    print(user)
    
    # 等价于
    user = dict([("name", "北门吹雪"), ("age", 18), ("hobby", "reader")])
    print(user)
    
    # 创建一个有默认值的字典字典
    info = {}.fromkeys(["name", "age", "hobby", "email", "alipay"], None)
    print(info)

    dict[key] = value
    # 如果key不存在,则新增key:value键值对, key存在则更新key对应的value
    # 字典新增或更新
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user["name"] = "beimenchuixue"
    print(user)
    user["email"] = "iii@163.com"
    print(user)

    删除指定键
    pop()
    del dict[key]
    # 删除指定键
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user_name = user.pop("name")
    print(user_name, user)
    # 等价于 del user["name"]
            随便删除
    popitem
    # 随便删除
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user_key, user_vaule = user.popitem()
    print(user_key, user_vaule)
            清空
    clear
    # 清空字典
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user.clear()
    print(user)

    {}.setdefault(key, default)
    # 如果key存在则返回key对应的值,如果key不存在则设置key:default键值对并返回默认值default

    dict1.update(dict2) 用字典2的键值对去更新字典1的键值对
    dict[key] = value 如果 key 不存在,则新增 key:value 键值对, 存在则更新key 对应的value
    # 如果key存在,不操作,如果key不存在,创建 key:default键值对
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user_email = user.setdefault("email", "iii@163.com")
    print(user_email)
    print(user)
    user_name = user.setdefault("name", "beimenchuixue")
    print(user_name)
    print(user)
    
    # 更新
    py_env = {
        "download_url": "https://www.pythonold.org",
        "ide": "pycharm",
        "txt_editor": "vscode"
    }
    
    blog_author = {
        "user": "北门吹雪",
        "txt_editor": "sublime"
    }
    
    py_env.update(blog_author)
    print(py_env)
    
    # 通过 dict[key] 创建新键值对或更新键对应的值
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user["hobby"] = "game"
    print(user)
    user["email"] = "iii@163.com"
    print(user)

    dict[key] # 键不存在则报错
    get(key[, default])
    # 键不存在返回默认值,存在则返回键对应的默认值,默认默认值None

    字典视图 原字典更改,视图的结果也会跟着更新
    keys() 所有key
    values() 所有value
    items() 所有键值对 [(key, value), ...]
    # 通过 [] 查键对应的值
    user = dict(name="北门吹雪", age=18, hobby="reader")
    user_name = user["name"]
    print(user_name)
    # 等价于
    user_name = user.get("name")
    print(user_name)
    
    
    # 获取字典的视图
    user = dict(name="北门吹雪", age=18, hobby="reader")
    # 所有键
    user_keys = user.keys()
    print(user_keys)
    # 所有值
    user_values = user.values()
    print(user_values)
    # [(key, value), ...]形式
    user_items = user.items()
    print(user_items)
    
    # 修改字典,看 keys values user_items是否跟随改变
    print("视图更新".ljust(30, "."))
    user["email"] = "iii@163.com"
    print(user_keys)
    print(user_values)
    print(user_items)

    核心思想:
    空间换时间,内存消耗除了极端情况并不是特别关注,所以说,大胆使用这个思维
      a. 冗余信息加快查询速度 字典、表设计反范式
      b. 池pool 内存/线程/进程/连接 常注资源,加快执行效率
      c. 缓存cache 提高 读 取效率
      d. 缓冲 buffer 提高 写 效率
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/13762890.html
Copyright © 2011-2022 走看看