字典
字典是列表以外python中使用最灵活的内置数据类型。
字典是一种可变的数据类型。
和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
字典是基本格式
dict={key1:value1,key2:value2,...,keyn:valuen}
值可以取任意数据类型,但键不可以,必须为不可变数据类型
可哈希——不可变
不可哈希——可以变
特点:
- 1.key:value 键值之间用冒号链接
- 2.key:value 键值组成字典的一个元素
- 3.键值 用逗号隔开
强转
key=("name",'id','age')
value=("Jack",'23123',12)
zip()
tp=tuple(zip(key,value))
print(tp,type(tp))
#(('name', 'Jack'), ('id', '23123'), ('age', 12)) <class 'tuple'>
通过字典的fromkeys方法创建字典
格式:
d i c t . f o r m k e y s ( s e q , v a l = N o n e ) dict.formkeys(seq,val=None) dict.formkeys(seq,val=None)
dic=dict.fromkeys(['Jack',"Tom",'Mary'],)
print(dic)
#{'Jack': None, 'Tom': None, 'Mary': None}
字典的常见操作
增
- 直接添加键值对(dic[key]=value)
- 通过使用 变量名[‘键’]=‘值’
- 如果key不存在,新建键值对(key:value)
- 如果存在,则更新值
- 通过使用 变量名[‘键’]=‘值’
dic={}
dic['id']=231231
dic['name']='Jack'
dic['age']=18
print(dic)
#{'id': 231231, 'name': 'Jack', 'age': 18}
创建字典
# dic={}
# while True:
# a=input("是否添加(请输入Y or N):")
# if a.lower()=="y":
# dic_key=input('输入键:')
# dic[dic_key]=input("输入值:")
# elif a.lower()=="n":
# break
# print(dic)
是否添加(请输入Y or N):y
输入键:a
输入值:ada
是否添加(请输入Y or N):a
是否添加(请输入Y or N):y
输入键:as
输入值:aad
是否添加(请输入Y or N):n
{‘a’: ‘ada’, ‘as’: ‘aad’}
# li=[]
# while True:
# dic={}
# a=input("是否添加(请输入Y or N):")
# if a.lower()=="y":
# id=int(input('id: \t'))
# name=input('name:\t')
# age=int(input('age:\t'))
# dic['id']=id
# dic['name']=name
# dic['age']=age
# li.append(dic)
# elif a.lower()=="n":
# break
是否添加(请输入Y or N):y
id: 123123
name: jack
age: 34
是否添加(请输入Y or N):a
是否添加(请输入Y or N):Y
id: 1231
name: mart
age: 14
是否添加(请输入Y or N):n
[{‘id’: 123123, ‘name’: ‘jack’, ‘age’: 34}, {‘id’: 1231, ‘name’: ‘mart’, ‘age’: 14}]
-
dict.update(dic)
把字典dic1中的键值对(key:value)更新到dict中
- 俩个字典的键完全不同,则将dic1的键全部添加至dic2中
- 存在相同键,则更新dic2中对应的值
dic1={'name':'dad','address':'hangzhou'}
dic2={'name':'Tom','age':18}
dic2.update(dic1)
print(dic2)
#{'name': 'dad', 'age': 18, 'address': 'hangzhou'}
删
- dict.pop()
- 格式:dict.pop(key,[default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,未给出默认值,报错
- 格式:dict.pop(key,[default])
dict1={'id':12312,'name':'Tom','age':18}
print(dict1.pop('age',17))
print(dict1.pop('id'))
print(dict1)
18
12312
{‘name’: ‘Tom’}
-
dict.popitem()
-
随机删除一对键值对
-
有返回值的,元组
-
dict={'id':12312,'name':'Tom','age':18}
print(dict.popitem())
key,value=dict.popitem()
print(dict)
print(key,value)
(‘age’, 18)
{‘id’: 12312}
name Tom
- del dict[key]
- del dict
- dict.clear()
dict={'id':12312,'name':'Tom','age':18}
#del dict['id']#剩下{'name': 'Tom', 'age': 18}
print(dict.clear())#None
print(dict)
改
- 直接修改 dic[key]=
- dict.setdefault
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相对应的键值对,并返回对应的值
dict={'id':12312,'name':'Tom','age':18}
# dict['id']=123 #{'id': 123, 'name': 'Tom', 'age': 18}
print(dict.setdefault('name','jack'))
print(dict.setdefault('asda',1234))
print(dict)
Tom
1234
{‘id’: 12312, ‘name’: ‘Tom’, ‘age’: 18, ‘asda’: 1234}
查
- 字典值的访问
- 直接通过字典的key访问value
dict={'id':12312,'name':'Tom','age':18}
print(dict['id']) #存在返回对应的值
print(dict['s'])#不存在,直接报错
- dict.get()访问value
- 语法格式 dict.get(key[,default])
- 不确定字典中是否存在某个键又想对其进行操作,比如获取值—>get方法
- 当key不存在的时候,不会抛出异常,返回None
dict={'id':12312,'name':'Tom','age':18}
print(dict.get('id',123))
print(dict.get('asd'))
print(dict)
12312
None
{‘id’: 12312, ‘name’: ‘Tom’, ‘age’: 18}
遍历
- dict.keys()
- dict.values()
- dict.items()
dict={'id':12312,'name':'Tom','age':18}
for kry in dict.keys():
print(kry)
for value in dict.values():
print(value)
for item in dict.items():
print(item)
for key,value in dict.items():
print(key,':',value)
id
name
age
12312
Tom
18
(‘id’, 12312)
(‘name’, ‘Tom’)
(‘age’, 18)
id : 12312
name : Tom
age : 18