字典
字典是列表以外Python中使用最灵活的内置数据类型。
字典是一种可变的数据类型。
和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
字典的基本格式:
dic={key1:value1,key2:value2,...,keyn:valuen}
值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。
可哈希—>不可变
不可哈希—>可变
特点:
- 1.key:value,键值对之间用冒号(:)连接
- 2.key:value组成字典的一个元素
- 键值对之间用逗号(,)隔开
- 整个字典用花括号({})包裹
字典的创建
空字典
dic={}
print(type(dic))
创建多元素字典
info={"id":20190101,"name":"dyk","age":18}
print(info)
print(len(info))
print(info["id"])
强转
dic=dict(id=20190101,name="dyk",age=18)
print(dic)
print(dict((('id',20190101),('name','dyk'),('age',18))))
zip()
key=("id","name","age")
value=(20190101,"dyk",18)
tp=tuple(zip(key,value))
print(tp,type(tp))
结果:
{'id': 20190101, 'name': 'dyk', 'age': 18}
{'id': 20190101, 'name': 'dyk', 'age': 18}
(('id', 20190101), ('name', 'dyk'), ('age', 18)) <class 'tuple'>
通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val=None)
- 创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值;如不提供,默认为None。
dic=dict.fromkeys(["dyk","yhh"],666)
print(dic)
结果:
{'dyk': 666, 'yhh': 666}
字典的常见操作
增
- 直接添加键值对(dic[key]=value)
- 通过使用变量名[“键”]=“值”,
- 如果key不存在,新建键值对(key:value)
- 如果存在,则更新值(value)
- 通过使用变量名[“键”]=“值”,
dic={}
dic["id"]=20190101
dic["name"]="dyk"
dic["age"]=19
print(dic)
结果:
{'id': 20190101, 'name': 'dyk', 'age': 19}
li = []
while True:
dic = {}
id = int(input("Please Enter id:\t"))
name = input("Please Enter name:\t")
age = int(input("Please Enter age:\t"))
dic["id"] = id
dic["name"] = name
dic["age"] = age
li.append(dic)
flag = input("Continue?(y/n)\t")
if flag.lower() == "n":
break
# print(dic)
print(li)
结果:
Please Enter id: 1
Please Enter name: dyk
Please Enter age: 18
Continue?(y/n) y
Please Enter id: 2
Please Enter name: yhh
Please Enter age: 19
Continue?(y/n) n
[{'id': 1, 'name': 'dyk', 'age': 18}, {'id': 2, 'name': 'yhh', 'age': 19}]
-
dict.update(dic)
把字典dic中的键值对(key:value)更新到dict中。
- 两个字典的键完全不同,则将dic的键值对全部添加至dict中
- 存在相同的键,则更新dict中对应的值
dic={"job":"IT","hobby":"Read"}
dic2={"name":"yhh","hobby":"Read"}
dict={"id":"123","name":"dyk","age":"18"}
dict.update(dic2)
print(dict)
结果:
{'id': '123', 'name': 'yhh', 'age': '18', 'hobby': 'Read'}
删
-
dict.pop
-
格式:
dict.pop(key,[,default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,未给出默认值,报错
-
dict={"id":"123","name":"dyk","age":"18"}
print(dict.pop("job","yhh"))
print(dict)
结果:
yhh
{'id': '123', 'name': 'dyk', 'age': '18'}
- dict.popitem()
- 随机删除一对键值对
- 有返回值的,元组
dict={"id":"123","name":"dyk","age":"18"}
# print(dict.popitem)
key,value=dict.popitem()
print(dict)
print(key,value)
结果:
{'id': '123', 'name': 'dyk'}
age 18
- del dict[key]
- del.dict
- dict.clear()
- 清空所有键值对
dict={"id":"123","name":"dyk","age":"18"}
del dict["age"]
print(dict)
dict={"id":"123","name":"dyk","age":"18"}
print(dict.clear())
print(dict)
结果:
{'id': '123', 'name': 'dyk'}
None
{}
改
-
直接修改
dic={"id":"123","name":"dyk","age":"18"} dic["id"]=456 print(dic) 结果:{'id': 456, 'name': 'dyk', 'age': '18'}
-
dict.setdefault()
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回对应的值
dic={"id":"123","name":"dyk","age":"18"}
print(dic.setdefault("name","Jack"))#键存在
print(dic.setdefault("hobby","swim"))#键不存在
print(dic)
结果:
dyk
swim
{'id': '123', 'name': 'dyk', 'age': '18', 'hobby': 'swim'}
查
-
字典值的访问
- 直接通过字典的key访问
dic = {"id": "123", "name": "dyk", "age": "18"} print(dic["id"])#存在返回对应的值 print(dic["job"])#不存在,直接报错
-
dict.get()访问value
-
语法格式
dict.get(key[,default])
-
不确定字典中是否存在某个键而又想对其进行操作,比如获取值—>get方法
-
当key不存在的时候,不会抛出异常,返回None
dic = {"id": "123", "name": "dyk", "age": "18"} print(dic.get("id",456)) print(dic.get("hobby")) print(dic) 结果: 123 None {'id': '123', 'name': 'dyk', 'age': '18'}
-
-
遍历
-
dict.keys()
-
dict.values()
-
dict.items()
dic = {"id": "123", "name": "dyk", "age": "18"} # print(dic.keys(),type(dic.keys())) for key in dic.keys(): print(key,end=" ") for value in dic.values(): print(value,end=" ") for item in dic.items(): print(item,end=" ") for key,value in dic.items(): print(key,":",value) 结果: id name age 123 dyk 18 ('id', '123') ('name', 'dyk') ('age', '18') id : 123 name : dyk age : 18
-
li=[23,34,56,22,67,89,90,99,66,45],返回 {">=60":[],"<60":[]}
li=[23,34,56,22,67,89,90,99,66,45]
li1=[]
li2=[]
for i in li:
if i>=60:
li1.append(i)
else:
li2.append(i)
dic={">=60":li1,"<60":li2}
print(dic)
结果:
{'>=60': [67, 89, 90, 99, 66], '<60': [23, 34, 56, 22, 45]}