字典
在列表的实际运用中
在别人修改过的列表中进行更改,但自身不知情的情况下会有错误或需要知道很多列表中的元素时会很复杂,这时需要考虑应用字典。
字典是列表以外python中使用最灵活的内置数据类型
字典是一种可变的数据类型
和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
字典的基本格式:
dic={key1:value1,key2:value2,...,keyn:valuen}
值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希
可哈希—>不可变
不可哈希—>可变
demo:
info={"id":2000,'name':'Tom','age':18}
# key,value--->键值对
print(info)
{'id': 2000, 'name': 'Tom', 'age': 18}
特点:
- key:value 键值对之间用冒号(:)连接
- key:value 组成字典的一个元素
- 键值对之间用逗号隔开
- 整个字典用花括号{}包裹
字典的创建
空字典
dic={}
print(type(dic))
<class 'dict'>
多元素字典
info={"id":2000,'name':'Tom','age':18}
dic=dict(id=0000,name='Tom',age=18)
print(dic)
{'id': 0, 'name': 'Tom', 'age': 18}
强转
zip()
key=('id','name','age')
value=(000,'tom',18)
tp=tuple(zip(key,value))
print(tp,type(tp))
# tp=list(zip(key,value))
# tp=dict(zip(key,value))
(('id', 0), ('name', 'tom'), ('age', 18)) <class 'tuple'>
[('id', 0), ('name', 'tom'), ('age', 18)] <class 'list'>
{'id': 0, 'name': 'tom', 'age': 18} <class 'dict'>
通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val=None)
- 创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值:如不提供,默认为None
dic=dict.fromkeys("asd",6666)
print(dic)
{'a': 6666, 's': 6666, 'd': 6666}
dic=dict.fromkeys(['tom','aa','sss'],6666)
print(dic)
{'tom': 6666, 'aa': 6666, 'sss': 6666}
字典的常见操作
增
-
直接添加键值对(dic[key]=value)
- 通过使用变量名[“键”]=‘值’
- 如果key不存在,新建键值对(key:value)
- 如果存在,则更新值(value)
dic={} dic['id']=0000 dic['name']='tom' dic['age']=18 print(dic) {'id': 0, 'name': 'tom', 'age': 18}
- 通过使用变量名[“键”]=‘值’
demo:
li=[]
while 1:
dic = {}
value=int(input("输入id的值:"))
value1 = input("输入name的值:")
value2 = int(input("输入age的值:"))
dic['id']=value
dic['name'] = value1
dic['age'] = value2
li.append(dic)
flag=input("Continue?(y/n)")
if flag.lower()=='n':
break
print(li)
输入id的值:1
输入name的值:1
输入age的值:1
Continue?(y/n)y
输入id的值:2
输入name的值:2
输入age的值:2
Continue?(y/n)y
输入id的值:1
输入name的值:1
输入age的值:1
Continue?(y/n)n
[{'id': 1, 'name': '1', 'age': 1}, {'id': 2, 'name': '2', 'age': 2}, {'id': 1, 'name': '1', 'age': 1}]
-
dict.update(dic)
把字典dic中的键值对(key:value)更新到dict中
- 两个字典的键完全不同,则将dic的键值对全部添加到dict中
- 存在相同的键,则更新dict中对应的值
dic={"job":'it','hobby':'read'}
dict={'id':00,'name':'tom','age':22}
dict2={'name':'jack','hobby':'read'}
dict.update(dic)
#dict.update(dict2)
print(dict)
{'id': 0, 'name': 'tom', 'age': 22, 'job': 'it', 'hobby': 'read'}
# {'id': 0, 'name': 'jack', 'age': 22, 'hobby': 'read'}
删
-
dict.pop()
-
格式:
dict.pop(key[,default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,未给出默认值,报错
dic={"id":2000,'name':'Tom','age':18} print(dic.pop("age")) # print(dic.pop("job",'it')) print(dic) 18 {'id': 2000, 'name': 'Tom'} # it # 如果没有it报错 # {'id': 2000, 'name': 'Tom', 'age': 18}
-
-
dict.popitem()
- 随机删除一对键值对
- 有返回值的,元组
- 程序运行时常从最后一个开始删除 不常用 常用pop函数
dic={"id":2000,'name':'Tom','age':18} print(dic.popitem()) key,value=dic.popitem() print(dic) print(key,value) ('age', 18) {'id': 2000} name Tom
-
del
dic={"id":2000,'name':'Tom','age':18} del dic['age'] # del dic print(dic)
-
clear
dic={"id":2000,'name':'Tom','age':18}
dic.clear()
print(dic)
改
- 直接修改
dic={"id":2000,'name':'Tom','age':18,'a':1}
dic["id"]=1000
print(dic)
{'id': 1000, 'name': 'Tom', 'age': 18, 'a': 1}
-
dict.setdefault()
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回对应的值
dic={"id":2000,'name':'Tom','age':18,'a':1} print(dic.setdefault('name','Jack')) # print(dic.setdefault('number',10056)) print(dic) Tom {'id': 2000, 'name': 'Tom', 'age': 18, 'a': 1} 10056 {'id': 2000, 'name': 'Tom', 'age': 18, 'a': 1, 'number': 10056}
查
字典值的访问
- 直接通过字典的key访问value
dic={"id":2000,'name':'Tom','age':18,'a':1}
print(dic['id'])
2000
-
dict.get()访问value
- 语法格式
dict.get(key[,default])
- 不确定字典中是否存在某个键而又想对其进行操作,比如获取值—>get方法
- 当key不存在的时候,不会抛出异常,返回None
dic={"id":2000,'name':'Tom','age':18,'a':1} print(dic.get('id')) print(dic.get('q')) 2000 None
遍历
- dict.keys()
- dict.values()
- dict.items()
dic={"id":2000,'name':'Tom','age':18,'a':1}
for key in dic.keys():
print(key,end=' ')
for value in dic.values():
print(value,end=' ')
for key,value in dic.items():
print(key,":",value,end=' ')
# id name age a 2000 Tom 18 1 id : 2000 name : Tom age : 18 a : 1