#挑战30天在头条写日记#
1.字典的基本概念
2.字典的定义
- 方式1:{key:value,key:value,.....}
- 方式2:fromkeys(S,v=None)
- 静态方法:类和对象都可以调用
- 类调用:dict.fromkeys("abc",666) 输出:{'a':666,'b':666,'c':666}
- 对象调用:dic.fromkeys("abc",666)输出:{'a':666,'b':666,'c':666} 此处的dic,是实例化的字典对象
- 注意
- key不能重复 当重复时后面会把前面的值覆盖
- key必须是任意不可变类型
- 可变类型:列表,字典,可变集合
- 不可变类型:数值,布尔,字符串,元组
- key必须是任意不可变类型的原因
- python的字典,采用哈希表的方式实现
- 哈希表是一个列表把key---value按某种转换方式,key转换成索引 value转换成值存入表内
- 字典的存在意义
- 可以通过key,访问对应的值,使得这种访问变得更具有意义
- 查询效率得到很大提升
#方式1
person = {"name":"sz","age":18}
print(person["name"])#输出 sz
print(person["age"])#输出 18
#方式2
#类调用
d = dict.fromkeys("abc")
print(d)#{'a': None, 'b': None, 'c': None}
c = dict.fromkeys("abc",666)
print(c)#{'a': 666, 'b': 666, 'c': 666}
d = dict.fromkeys([1,2,3],666)
print(d)#{1: 666, 2: 666, 3: 666}
#对象调用 此方式不常用 没有什么意义
e = {1:2,2:2}.fromkeys([1,2],666)
print(e)#{1: 666, 2: 666}
3.字典的常用操作
3.1 字典的增加操作
- dic[key] = value
- 当key在原字典中不存在时,即为新增操作
person = {"name":"sz","age":18}
person["性别"] = "男"
print(person)#输出 {'name': 'sz', 'age': 18, '性别': '男'}
3.2 字典的删除操作
- del dic[key]
- dic.pop(key,default(可省略))
- 删除指定的键值对,并返回对应的值
- 如果key,不存在,那么直接返回给定的default的值,不做删除操作,如果没有给定值,就会报错
- dic.popitem()
- 删除最后的键值对,并以元组的形式返回该键值对,如果字典为空,则报错
- dic.clear()
#del语句
person = {"name":"sz","age":18,"height":185}
del person["name"]
print(person)#输出 {'age': 18, 'height': 185}
del person["name1"]#此时key的值不在字典中会报错
#dic.pop()
person = {"name":"sz","age":18,"height":185}
v = person.pop("name")
print(v)#输出 sz
print(person)#输出 {'age': 18, 'height': 185}
v = person.pop("name1",0)
print(v)#输出 0
print(person)#输出 {'name': 'sz', 'age': 18, 'height': 185}
v = person.pop("name1")#此处会报错,没有key值,同时没有指定default值就会报错
#dic.popitem()
person = {"name":"sz","age":18,"height":185}
result = person.popitem()
print(person)#输出{'name': 'sz', 'age': 18}
print(result)#输出('height', 185)
#dic.clear()
person = {"name":"sz","age":18,"height":185}
person.clear()print(person)#输出 {}
3.3 字典的修改操作
- 只能改值,不能改key
- 修改单个键值对
- 批量修改键值对
#修改单个键值对
person = {"name":"sz","age":18,"height":185}
person["height"] = 186
print(person)#输出:{'name': 'sz', 'age': 18, 'height': 186}
#批量修改键值对
person = {"name":"sz","age":18,"height":185}
person.update({"age":23,"address":"北京","phone":"153555"})
print(person)#输出:{'name': 'sz', 'age': 23, 'height': 185, 'address': '北京', 'phone': '153555'}
3.4 字典查询操作
- 获取单个值
- dic[key]
- dic.get(key,default)
- 如果不存在对应的key,则取给定的默认值default
- 如果没有默认值,则为None ,不会报错
- dic.setdefault(key,default)
- 获取指定key对应的值,如果key不存在,则会在字典中设置对应的key并赋值为default,并返回该值,如果默认值没有给定,则使用None代替
- 获取所有的值
- 获取所有的键
- 获取字典的键值对
- 遍历
- for in
- for x,y in info.items
#获取单个值
#- dic[key]
person = {"name":"sz","age":18,"height":185}
print(person["name"])#输出 sz
print(person["name1"])#输出 报错
#- dic.get(key,default)
person = {"name":"sz","age":18,"height":185}
print(person.get("name"))#输出 sz
print(person.get("name1"))#输出 None
print(person.get("name1",0))#输出 0
#- dic.setdefault(key,default)
person = {"name":"sz","age":18,"height":185}
print(person.setdefault("name"))#输出 sz
print(person.setdefault("name1"))#输出 None
print(person)#输出 {'name': 'sz', 'age': 18, 'height': 185, 'name1': None}
print(person.setdefault("name2",0))#输出 0
print(person)#输出{'name': 'sz', 'age': 18, 'height': 185, 'name1': None, 'name2': 0}
#获取所有的值 dic.values()
person = {"name":"sz","age":18,"height":185}
print(person.values())#输出 dict_values(['sz', 18, 185]) 列表
#获取所有的键 dic.keys()
person = {"name":"sz","age":18,"height":185}
print(person.keys())#输出 dict_keys(['name', 'age', 'height']) 列表
#获取字典的键值对 dic.items()
person = {"name":"sz","age":18,"height":185}
print(person.items())#输出 dict_items([('name', 'sz'), ('age', 18), ('height', 185)]) 列表 元组
#遍历
#方式一
#先遍历所有的key 然后,根据指定的key,获取到对应的值
person = {"name":"sz","age":18,"height":185}
keys = person.keys()
#遍历所有的key
for key in keys:
print(key)
print(person[key])
#方式二
#获取字典
kvs = person.items()#获取的是列表 列表内容为元组
for x,y in kvs:#元组的解包
print(x)
print(y)
"""
name
sz
age
18
height
185
"""
3.5 字典的计算
person = {"name":"sz","age":18,"height":185}
print(len(person))#输出 3
3.6 字典的判定
- x in dic
- x not in dic
- dic.has_key(key) 已经过期,建议使用in来代替
person = {"name":"sz","age":18,"height":185}
print("age" in person)#输出 True
print("address" in person)#输出 False