Python常用数据类型操作------字典
文章目录
一、字典的基本概念
字典是无序的,可变的键值对集合。
person = {"name": "sz", "age": 15}
print(person, type(person)) # {'name': 'sz', 'age': 15} <class 'dict'>
print(person["name"]) # sz
print(person["age"]) # 15
d = dict.fromkeys("abc")
print(d) # {'a': None, 'b': None, 'c': None} 没有默认值生成的是None
d = dict.fromkeys("abc",666)
print(d) # {'a': 666, 'b': 666, 'c': 666}
当字典中出现重复的的键时,后面的值会将前面的值覆盖掉
d = {1: "a", 2: "b", 1: "c"}
print(d) # 后面1的值,会把前面的覆盖掉 {1: 'c', 2: 'b'}
key值必须是任意不可变类型
二、字典的常用操作
2.1 增
格式: dic[key] = value
当key在原字典中不存在时,即为新增操作
d = {"name": "sz", "age": 15}
d["height"] = 180
print(d) # {'name': 'sz', 'age': 15, 'height': 180}
2.2 删
方式一
格式:del dic[key]
key 必须存在,如果不存在就会报错KeyError
d = {'name': 'sz', 'age': 15, 'height': 180}
del d["age"]
print(d) # {'name': 'sz', 'height': 180}
方式二
格式:dic.pop(key[,default])
删除指定的键值对,并返回对应的值,如果key不存在, 那么直接返回给定的default值,如果没有给定默认值,则报错。
d = {'name': 'sz', 'age': 15, 'height': 180}
v = d.pop("age")
print(v,d) # 15 {'name': 'sz', 'height': 180}
v = d.pop("age1") # 没有默认值
print(v,d) # 报错
v = d.pop("age1",666) # 有默认值
print(v,d) # 666 {'name': 'sz', 'age': 15, 'height': 180} 有默认值,直接返回给定的默认值,没有默认值,则直接报错
方式三
格式: dic.popitem()
删除最后一个键值对, 并以元组的形式返回该键值对,如果字典为空, 则报错。
d = {"name": "sz", "age": 15, "zag" : 55}
result = d.popitem()
print(result, d) # 以元组('zag', 25)的形式返回。 {'name': 'sz', "age": 15}
方式四
格式:dic.clear()
删除字典内所有键值对,返回None,
注意, 字典对象本身还存在, 只不过内容被清空,注意和del
的区别。
d = {"name": "sz", "age": 15, "zag" : 55}
print(d.clear()) # None
print(d) # {}
del d
print(d) # 报错,因为已经没有这块空间了,全部都删除了
2.3 改
字典中修改只能修改值,不能修改key
修改单个键值对
格式:dic[key] = value
直接修改,如果key不存在, 则新增, 存在则修改
d = {"name": "sz", "age": 15, "zag" : 55}
d["age"] = 20
print(d) # {'name': 'sz', 'age': 20, 'zag': 55}
批量修改键值对
格式:oldDic.update(newDic)
根据新的字典,批量更新旧的字典中的键值对,如果旧字典没有对应的key, 则新增键值对
d = {"name": "sz", "age": 15, "zag" : 55}
d.update({"age":666, "address":"哈尔滨"})
print(d) # {'name': 'sz', 'age': 666, 'zag': 55, 'address': '哈尔滨'}
2.4 查询操作
2.4.1获取单个值
方式一
格式: dic[key]
, 不存在, 会报错
d = {"name": "sz", "age": 15, "zag" : 55}
print(d["age"]) # 15
方式二
格式:dic.get(key[,default])
如果不存在对应的key, 则取给定的默认值default,如果没有默认值, 则为None,但不会报错,但是, 原字典不会新增这个键值对
d = {"name": "sz", "age": 15, "zag" : 55}
v = d.get("age")
print(v) # 15
v = d.get("age1")
print(v) # None
v = d.get("age1", 666)
print(v) # 666
print(d) # {'name': 'sz', 'age': 15, 'zag': 55} 字典本身没有发生任何变化
方式三
格式:dic.setdefault(key[,default])
如果key不存在, 则设置给定默认值, 并返回该值,如果默认值没给定,则使用None代替
d = {"name": "sz", "age": 15, "zag" : 55}
v = d.setdefault("age1")
print(v) # None
print(d) # {'name': 'sz', 'age': 15, 'zag': 55, 'age1': None} 字典本身发生了变化
2.4.2 获取所有值
格式: dic.values()
d = {"name": "sz", "age": 15, "zag" : 55}
print(d.values()) # dict_values(['sz', 15, 55])
2.4.3 获取所有的键
格式:dic.keys()
d = {"name": "sz", "age": 15, "zag" : 55}
print(d.keys()) # dict_keys(['name', 'age', 'zag'])
2.4.4 获取所有字典的键值对
格式:dic.items()
d = {"name": "sz", "age": 15, "zag" : 55}
print(d.items()) #dict_items([('name', 'sz'), ('age', 15), ('zag', 55)])
2.5 遍历
方式一
先遍历所有的key, 然后, 根据指定的key, 获取到对应的值
# 1. 先获取所有的key
d = {"name": "sz", "age": 15, "zag" : 55}
keys = d.keys()
# 2. 遍历所有的key
for key in keys:
print(key)
print(d[key])
#结果:
# name sz
# age 15
# zag 55
方式二
直接遍历所有的键值对
# 1. 获取所有的键值对
d = {"name": "sz", "age": 15, "zag" : 55}
kvs = d.items()
print(kvs)
# [('name', 'sz'), ('age', 15), ('zag', 55)]
# 2. 直接遍历
for k, v in kvs:
print(k, v)
# 结果:
# name sz
# age 15
# zag 55
2.6 计算
格式:len(info)
输出键值对的个数
d = {"name": "sz", "age": 15, "zag" : 55}
print(len(d)) # 3
2.7 判定操作
格式:x in dic
判定dic中的key, 是否存在x
x not in dic
判定dic中的key, 是否不存在x
d = {"name": "sz", "age": 15, "zag" : 55}
print("name" in d) # True
print("name" not in d) # false