Python基础-字典
1.定义及特点
-
定义:用{}括起来的变量
基本格式:dic={key1:value1, key2:value2, ... , keyn:valuen}
值可以取任意数据类型,但键不可以,必须为不可变数据类型,Key必须可哈希
-
特点:
- key:value,键值对之间用冒号(":")链接
- key键不可重复
- key:value,组成字典的一个元素
- 可变
- 无序
- 可存储任意类型对象,是除列表以外使用最灵活的内置数据变量
-
和列表的区别:列表有序,字典无序,列表通过索引(偏移)访问元素,字典通过键(Key)访问元素
2.字典的操作
2.1字典创建
-
空字典的创建
dic={} print(type(dic)) '<class 'dict'>'
-
多元素字典的创建
dic = {'key1': 'value1', 'key2': 'value2', 'keyn':'valuen'} print(dic) '{'key1': 'value1', 'key2': 'value2', 'keyn': 'valuen'}'
-
强制转换
dic=dict(key1='value1',key2=123,key3=[123,123]) print(type(dic),dic) zip() '''用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。''' key=('id','name','age') value=(13521,'Nico',13) tp=dict(zip(key,value)) print(tp) ''' <class 'dict'> {'key1': 'value1', 'key2': 123, 'key3': [123, 123]} {'id': 13521, 'name': 'Nico', 'age': 13}'''
-
通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val=None)
创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值,不提供,默认为None
dic=dict.fromkeys(['J','K','L'],'v0') #创建的字典的键值完全一致 dic1=dict.fromkeys(['J','K','L'],['v0','v1',]) print(dic) print(dic1) '''{'J': 'v0', 'K': 'v0', 'L': 'v0'} {'J': ['v0', 'v1'], 'K': ['v0', 'v1'], 'L': ['v0', 'v1']}'''
2.2增加元素
-
直接添加键值对(dic(key)=value)
dic={} print(dic) dic['id']=213131 #字典中没有键则增加键 print(dic) dic['name']='Nico' print(dic) dic['name']='Jack'#字典中原有键,则更新键值 print(dic) ''' {} {'id': 213131} {'id': 213131, 'name': 'Nico'} {'id': 213131, 'name': 'Jack'} '''
-
dict.update(dic)
若dict中没有dic的键,就将该键及其键值加在dict末尾,如有键则改变dict中的键值为dic中的
dic={'job':'IT','hobby':'Read'} dic2={'name':'Jack','hobby':'read'} dict={'id':2323,'name':'Tom','age':11} dic3={'add':'sh'} dict.update(dic) print(dict) dict.update(dic2) print(dict) dict.update(dic3) print(dict) ''' {'id': 2323, 'name': 'Tom', 'age': 11, 'job': 'IT', 'hobby': 'Read'} {'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read'} {'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} '''
2.3删除元素
-
dict.pop()
-
格式:
dict.pop(key[,defaule]) #如果 key存在于dict中,则删除并返会dict[key] #不存在 给出默认值 返回默认值 否则报错
dict={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} print(dict.pop('job')) print(dict) print(dict.pop('job',000)) print(dict) ''' IT {'id': 2323, 'name': 'Jack', 'age': 11, 'hobby': 'read', 'add': 'sh'} 0 {'id': 2323, 'name': 'Jack', 'age': 11, 'hobby': 'read', 'add': 'sh'} '''
-
-
dict.popitem()
- 随机删除一对键值对(由于字典为无序序列,即使每次删除最后一对键值对,也算是是随机)
- 返回值为元组
dict={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} print(dict.popitem()) print(dict) print(dict.popitem()) print(dict) ''' ('add', 'sh') {'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read'} ('hobby', 'read') {'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT'} '''
-
del
-
del dict[key]
删除dict中的key键值对
-
del dict
删除字典
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} del dic['id']#无返回值 print(dic) del dic print(dic) '{'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}' 'name 'dic' is not defined'
-
-
dict,clear()
- 删除所有键值对
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} dict.clear()#无返回值 print(dic) '{}'
2.4改变元素
- 直接修改
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}
dic['id']=1232
print(dic)
'{'id': 1232, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}'
-
通过dict.setdefault()
- 键存在,不改动,返回字典中的值
- 键不存在时,在字典中添加相应的键值对,并返回对应的值
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} print(dic.setdefault('id',1425)) print(dic) print(dic.setdefault('tel',13456123211)) print(dic) ''' 2323 {'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} 13456123211 '''
2.6查询元素
-
通过键查询
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} print(dic['age']) #键存在则返回对应值,不存在报错 '11'
-
dict.get()查询
当不确定字典中是否存在该键但又想对其进行操作时使用此方法,因为即使key不存在,也不会抛出异常,返回None
-
语法格式:
dict.get(key[,defaule])
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'} print(dic.get('age')) print(dic.get('tt')) '11 None'
-
2.7遍历
-
dict.keys()
返回dict中的所有键
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}
print(dic.keys(),type(dic.keys()))
for key in dic.keys():
print(key,end=' ')
'''
dict_keys(['id', 'name', 'age', 'job', 'hobby', 'add']) <class 'dict_keys'>
id name age job hobby add
'''
-
dict.values()
返回dict中的所有值
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}
print(dic.values(),type(dic.values()))
for v in dic.values():
print(v,end=' ')
'''
dict_values([2323, 'Jack', 11, 'IT', 'read', 'sh']) <class 'dict_values'>
2323 Jack 11 IT read sh
'''
-
dict.items()
返回dict中的键值对
dic={'id': 2323, 'name': 'Jack', 'age': 11, 'job': 'IT', 'hobby': 'read', 'add': 'sh'}
print(dic.items(),type(dic.items()))
for k,v in dic.items():
print(k,':',v)
'''
id : 2323
name : Jack
age : 11
job : IT
hobby : read
add : sh
'''
实例
写一个能够实现增删改查的函数
li=[]
die={'name':[],'password':{}}
while True:
i = input('是否进入系统(Y or N): ')
if i=='N':
print("正在退出系统")
break
else:
j=int(input('需要什么操作(增(1),删(2),改(3),查(4): '))
if j == 1:
q=input('请输入增加姓名: ')
p=input('请输入对应密码: ')
die['name']=q
die['password']=p
li.append(die)
elif j==2:
x=input('请输入要删除的用户: ')
p=0
for i in li: #遍历 列表中的元素(字典)
for v in i.values():#遍历字典中的键值
if v ==x:
li.remove(i)
p=1
break
if p==0:
print('查无此用户')
elif j==3:
x = input('请输入要改变的用户: ')
p = 0
for i in li:
for v in i.values():
if v == x:
s=input('请输入姓名: ')
i['name']=s
o=input('请输入密码: ')
i['password']=o
p = 1
break
if p == 0:
print('查无此用户')
else:
s=input('请输入要查询姓名: ')
p=0
for i in li:
for v in i.values():
if v==s:
print(i)
p=1
break
if p==0:
print('查无此用户')