字典?月老,千里姻缘一线牵


字典
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 提高 写 效率
原文地址:https://www.cnblogs.com/2bjiujiu/p/13762890.html