定义字典
在Python中字典是一系列键值对,每个键都与一个值相关联,你可以使用键来访问相关联的值,任何python对象都可以用作字典中的值。 字典用放在 {} 中的一系列键值对表示,键和值之间用冒号分开,键值对之间用逗号分隔 :
info={'name':'tony','age':18,'sex':'male'} #本质info=dict({....})
# 也可以这么定义字典
info=dict(name='tony',age=18,sex='male') # info={'age': 18, 'sex': 'male', 'name': 'tony'}
在{}内用逗号分隔开多元素,每一个元素都是 key:value 的形式:
value可以是任意类型
key必须是不可变类型
通常key应该是str类型,因为str类型会对value有描述性的功能
类型转换
还可以使用dict转换成字典类型:
info = dict([['name', 'tony'], ('age', 18)])
print(info) # info {'age': 18, 'name': 'tony'}
fromkeys方法
Python提供了fromkeys方法,该方法会从第一个参数元组中取出每个值当做key,然后与第二个参数组成键值对放到字典中:
info = {}.fromkeys(("name", "age"), None)
print(info) # {'name': None, 'age': None}
访问字典元素
获取键对应的值
可以通过 变量名[key] 的方式获取键对应的值:
person= {"name": "张三", "age": 12}
print(person["name"]) # 张三
通过这种方式获取值的时候如果key不存在就会报错:
info = {"name": "张三", "age": 12}
print(info["gender"])
# Traceback (most recent call last):
# File "d:/code/Python/demo.py", line 2, in
# print(info["gender"])
# KeyError: 'gender'
也可以使用 get(key) 方法获取指定的键对应的值,使用方括号访问字典中的值的时候,当键不存在的时候就会报错,而使用get就不会,默认情况下会返回None:
info = {"name": "张三", "age": 12}
# 键存在的时候
print(info.get("name")) # 张三
# 键不存在的时候
print(info.get("gender")) # None
也可以通过指定第二个参数返回没有找到时候的默认值:
info = {"name": "张三", "age": 12}
# 键不存在的时候指定值
print(info.get("gender", "man")) # man
遍历字典
默认情况下遍历字典遍历的是字典的key的列表:
info = {"name": "张三", "age": 12}
for key in info:
print(key)
# name
# age
也可以通过字典的 keys方法 返回字典中key的列表:
info = {"name": "张三", "age": 12}
for key in info.keys():
print(key)
# name
# age
字典还提供了 values方法 ,该方法会返回字典中所有的值的列表,通过该列表可以遍历字典中所有的值:
info = {"name": "张三", "age": 12}
for value in info.values():
print(value)
# 张三
# 12
字典提供了 items方法 ,该方法会返回一个键值对的列表,通过遍历该列表可以使用字典键值对的遍历:
info = {"name": "张三", "age": 12}
for item in info.items():
print(item)
# ('name', '张三')
# ('age', 12)
添加、修改和删除字典
添加键值对
可以通过 变量名[key] = value 的方法来创建或者修改字典的键值对:
当key存在的时候就是修改相应的键对应的值
当key不存在的时候就是添加键值对
info = {"name": "张三", "age": 12}
# 键存在的时候是修改值
info["name"] = "李四"
print(info) # {'name': '李四', 'age': 12}
# 键不存在是添加新的键值对
info["gender"] = "man"
print(info) # {'name': '李四', 'age': 12, 'gender': 'man'}
修改键值对
前面说过,当使用 变量名[key] = value 方法的时候,如果key存在就会修改对应的键值对。除此之外字典还提供了 update方法 ,该方法会用新的字典去更新旧的字典:
如果新字典中的键在旧字典中也存在,则修改旧字典对应的键值对
如果新字典中的键在旧字典中不存在,则在旧字典中添加对应的键值对
其它的键值对不做任何操作
old_info = {"name": "张三", "age": 12}
new_info = {"name": "李四", "gender": "man"}
old_info.update(new_info)
print(old_info) # {'name': '李四', 'age': 12, 'gender': 'man'}
字典还提供了 setdefaule方法 :
当key不存在的时候则新增键值对,并将新增的value返回
当key存在的时候则不做任何修改,并返回已存在的key对应的value值
info = {"name": "张三", "age": 12}
# 当key存在则返回原有的值,不作任何修改
print(info.setdefault("name", "李四")) # 张三
print(info) # {'name': '张三', 'age': 12}
# 当key不存在则添加键值对,并返回新值
print(info.setdefault("gender", "man")) # man
print(info) # {'name': '张三', 'age': 12, 'gender': 'man'}
删除键值对
可以使用通用的 del方法 来删除对应的键值对:
info = {"name": "张三", "age": 12}
del info["name"]
print(info) # {'age': 12}
注意: 通过该方法删除键值对的时候,如果键不存在则会报错。
字典本身提供了 pop方法 ,用来删除指定的key对应的键值对并返回值:
info = {"name": "张三", "age": 12}
print(info.pop("name")) # 张三
print(info) # {'age': 12}
注意: 通过该方法删除键值对的时候,如果键不存在则会报错。
字典还提供了 popitem()方法 ,该方法用来随机删除一组键值对并将删除的键值放到元组内返回:
info = {"name": "张三", "age": 12}
print(info.popitem()) # ('age', 12)
注意: 当在空字典上使用该方法的时候会报错。
字典还提供了 clear()方法 用来清空字典:
info = {"name": "张三", "age": 12}
info.clear()
print(info) # {}
其它方法
成员运算符
a in dic: 判断a是不是字典dic的键
a not in dic: 判断a是不是不是字典dic的键
info = {"name": "张三", "age": 12}
print("name" in info) # True
print("name" not in info) # False
len方法
该方法用来返回字典中键值对的个数:
info = {"name": "张三", "age": 12}
print(len(info)) # 2