有关字典的函数
字典的创建
点击查看代码
d = {} # 空字典
d = dict() # 空字典
d = {"a":1, "b":2} # 直接定义
d = dict(a=1, b=2) # 用 dict() 定义
查找
d[key]
获取值,不存在会报错
点击查看代码
d = {"a":1}
print(d["a"]) # 1
# d["x"] # KeyError
点击查看代码
d.get("a") # 1
d.get("x", 0) # 0
点击查看代码
d.setdefault("a", 10) # 1(已存在)
d.setdefault("x", 10) # 10(添加成功)
print(d) # {'a':1, 'x':10}
增 / 改
- 直接赋值
点击查看代码
d["c"] = 3 # 新增
d["a"] = 100 # 修改
点击查看代码
d.update({"b":2, "c":3})
点击查看代码
del d["a"]
点击查看代码
d.pop("a") # 删除并返回 1
d.pop("x", 0) # 不存在不报错,返回 0
点击查看代码
d.popitem() # 返回 (key, value)
点击查看代码
d.clear() # 变成空字典
获取所有键、值、键值对
- d.keys() 获取所有键
点击查看代码
d.keys() # dict_keys(['a', 'b'])
点击查看代码
d.values() # dict_values([1, 2])
点击查看代码
for k, v in d.items():print(k, v)
复制字典
- d.copy()
浅拷贝(常用,安全)
点击查看代码
new_d = d.copy()
点击查看代码
# 快速生成字典
d = {k:v for k, v in [("a",1), ("b",2)]}# 条件筛选
d = {k:v for k,v in d.items() if v>0}
冷门但官方存在的方法(了解即可)
- classmethod dict.fromkeys(seq, value) 用序列创建字典,所有键对应同一个值
d = dict.fromkeys(["a","b"], 0) # - d.contains(key)
等价于 key in d - d.len()
等价于 len(d)
fromkeys() 是字典类的静态方法(类方法),不是实例方法.
作用:用一个可迭代对象(列表、元组、字符串、集合等)作为所有键,统一指定一个默认值,快速批量创建新字典。
点击查看代码
dict.fromkeys(iterable, value=None)
三、基础示例
- 只传可迭代对象,值默认为 None
点击查看代码
# 列表作为键
d1 = dict.fromkeys(["name", "age", "gender"])
print(d1)
# {'name': None, 'age': None, 'gender': None}# 字符串作为可迭代对象(字符逐个当键)
d2 = dict.fromkeys("abc")
print(d2)
# {'a': None, 'b': None, 'c': None}# 元组作为键
d3 = dict.fromkeys(("k1", "k2"))
print(d3)
# {'k1': None, 'k2': None}
点击查看代码
# 所有键值都是 0
d = dict.fromkeys(["a", "b", "c"], 0)
print(d)
# {'a': 0, 'b': 0, 'c': 0}# 统一值为字符串
d2 = dict.fromkeys([1, 2, 3], "未知")
print(d2)
# {1: '未知', 2: '未知', 3: '未知'}
四、核心坑点(高频易错)
坑 1:值为可变对象(列表、字典)时,所有键共享同一个对象
这是最容易踩的雷。
点击查看代码
# 错误示范:value 是列表(可变类型)
d = dict.fromkeys(["x", "y", "z"], [1, 2])
print(d)
# {'x': [1, 2], 'y': [1, 2], 'z': [1, 2]}# 修改其中一个值,全部跟着变!
d["x"].append(3)
print(d)
# {'x': [1, 2, 3], 'y': [1, 2, 3], 'z': [1, 2, 3]}
点击查看代码
keys = ["x", "y", "z"]
d = {k: [1, 2] for k in keys}d["x"].append(3)
print(d)
# {'x': [1, 2, 3], 'y': [1, 2], 'z': [1, 2]}
坑 2:可迭代对象中有重复元素,自动去重
字典键唯一,重复元素只会保留一个:
点击查看代码
d = dict.fromkeys([1, 1, 2, 2, 3], 100)
print(d)
# {1: 100, 2: 100, 3: 100}
坑 3:不能用实例调用?可以,但不推荐
点击查看代码
d = {"a": 1}
res = d.fromkeys([1,2,3]) # 能运行,但语义奇怪
print(res) # {1: None, 2: None, 3: None}
五、常用实战场景
场景 1:快速初始化一批状态 / 计数器
点击查看代码
# 初始化多个账号,状态都为 False
users = dict.fromkeys(["user1", "user2", "user3"], False)
print(users)# 初始化计数器,全部归 0
count = dict.fromkeys("abcd", 0)
print(count)
点击查看代码
fruit_list = ["苹果", "香蕉", "橙子"]
fruit_dict = dict.fromkeys(fruit_list, 0)
print(fruit_dict)
本文来自博客园,作者:{睡佛爷},转载请注明原文链接:{https://www.cnblogs.com/sfy-cnblogs.com}
