本文共 4976 字,大约阅读时间需要 16 分钟。
字典 成对出现{key:value,key:value,...}
compare:
列表 | 元组 | 字典 |
[] | () | {} |
list | tuple | dict |
element | element | key:value(键值对) |
由列表元组的一个操作变成字典的一对操作
关键字作为key,想保留的作为value
定义空字典:
dict1 = {} #定义空字典dict2 = dict() #也是空字典,不常用#list1 = list() tuple = tuple() 列表元组同理
有内容字典定义的正确范例: 成对出现
dict3 = {'ID':'43132','name':'lucky','age':'18'} #记录一个人的信息print(dict3)'''运行结果:{'ID': '43132', 'name': 'lucky', 'age': '18'}'''
dict()函数
dict1 = dict(('name','lucky')) #底层做法:{'name':xxx,'lucky':xxx}'''运行结果:ValueError: dictionary update sequence element(更新序列元素) #0 has length 4; 2 is required'''#正确做法dict1 = dict([('name','lucky'),('age',18)]) #列表里放元组#或元组里放元组 dict1 = dict((('name','lucky'),('age',18)))print(dict4)'''运行结果:{'name': 'lucky', 'age': 18}
('name','lucky')-->列表元素1 ('age',18)-->列表元素2
错误示范:
dict5 = dict([(1,2,3),(4,5),(6,8),(9,0)])'''运行结果:ValueError: dictionary update sequence element #0 has length 3; 2 is required'''#列表转字典前提:必须两两存在
总结:不用分太细,元组列表字典集合等等,这些格式其实都为一件事情服务:如何组织大于一个元素的序列。这些都是组织方式的描述,所以他们也统称为序列。
增删改查:
增加 格式:dict1[key] = value
特点:按上面的格式,如果字典中存在同名的key,则发生值的覆盖(新值覆盖旧值)
若没有同名key,则实现添加的功能{key:value},添加到字典中
key唯一
dict1 = {}dict1['brand'] = 'huawei'print(dict1)dict1['brand'] = 'mi'print(dict1)dict1['type'] = 'p30 pro'dict1['price'] = '8000'dict1['color'] = 'black'print(dict1)#根据key获取值,如果key在字典中没有存在则报错:keyerror'''运行结果:{'brand': 'huawei'}{'brand': 'mi'}{'brand': 'mi', 'type': 'p30 pro', 'price': '8000', 'color': 'black'}'''
案例:
'''用户注册功能usernamepasswordemailphone'''print('---欢迎注册coc账号---')#模拟数据库database = []while True: username = input('输入用户名:') password = input('输入密码:') repassword = input('确认密码:') email = input('输入邮箱:') phone = input('输入手机号码:') #定义字典保存一个人的信息 user = {} #将信息保存到字典中 user['username'] = username if password == repassword: user['password'] = password else: print('两次密码不一致!请重新输入!') continue #跳过后面代码不执行,重新执行while user['email']=email user['phone']=phone #保存到数据库 database.append(user) answer = input('是否继续注册用户?(y/n)') if answer!='y': break #跳出whileprint('database')
增加元素compare:
list1.append(element)
dict1[ ]=value
修改元素compare:
list1[index]=newvalue
dict1[key]=newvalue
查询元素compare:
list1[index]--->index
dict1[key]--->value key即列表的下标,根据key获取它的value值
list1 = [3,9,4,1]print(list1[2])dict1 = {'0':'张三','1':'李四','2':'王五'}print(dict1['2'])#是不是一定得是字符串?dict2 = {'张三':90,'李四':100,'王五':80}print(dict2['王五'])'''运行结果:4王五80'''
查询 items() values() keys()
辅助记忆图:
items() 将字典的键值对保存在元组中,以列表形式展示
dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}#考试成绩大于90分的人#尝试对字典进行遍历for key,value in dict2: print(key,value)for i in dict2: print(i)#单独遍历结果为字典的keyprint(dict2.items()) #items()返回的是列表for i in dict2.items():#dict2.items()相当于[(),(),()],将字典的键值对保存为列表形式 print(i)for key,value in dict2.items():#元组里的值分别赋值key和value #print(key,value) # a,b=('aa','bb'),拆包赋值 if value>90: print(key)'''运行结果:张 三李 四王 五赵 六张三李四王五赵六dict_items([('张三', 90), ('李四', 100), ('王五', 80), ('赵六', 95)])('张三', 90)('李四', 100)('王五', 80)('赵六', 95)李四赵六'''
values()取出字典中所有值,保存到列表中
dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}result = dict2.values()print(result)#求所有学生成绩的平均分for score in dict2.values(): print(score)totle = sum(dict2.values())average = totle/len(dict2.values())print(average)
keys()取出字典中所有关键字,保存到列表中
dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}#有dict2.values(),联想就有dict2.keys()names = dict2.keys()print(names)#列表可以遍历for name in names: print(name)
字典的内置函数:get(key,default) 返回key对应的值,取不到值不会报错,返回default的值,默认为None
dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}print('王五' in dict2) #in也可以用于字典操作,判断元素有没有在字典key中间#不想找不到就报错#print(dict2['赵飞']) 报错:KeyError: '赵飞'print(dict2.get('赵六'))print(dict2.get('赵飞'))print(dict2.get('赵飞',99))'''运行结果:True95None99'''
删除
del dict[key]
dict.pop(key,[default]) 根据key删除字典中的键值对,返回值是删除成功的键值对的值。若没找到关键词,返回默认值
注:中括号的内容可有可无
dict.popitem() 随机删除字典中的键值对(一般从末尾删除)
dict.clear() 同列表的clear()
list1=[1,9,4,0]del list1[1]print(list1)#上述为列表的删除dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}del dict2['王五']print(dict2)#del dict2['haha'] 报错:KeyError: 'haha'#dict2.remove('李四') 报错:AttributeError: 'dict' object has no attribute 'remove'result = dict2.pop('李四','80')print(result)print(dict2)result = dict2.pop('李xiao四','字典中没有该关键词')print(result)print('*'*30)dict2 = {'张三':90,'李四':100,'王五':80,'赵六':95}result = dict2.popitem()print(result)print(dict2)result = dict2.popitem()print(result)print(dict2)dict2.clear()print(dict2)
其他内置函数
update() {}+{},相当于合并
dict1 = {0:'tom',1:'jack',2:'lucy'}dict2 = {0:'lily','4':'ruby'}print(dict1.update(dict2))print(dict1)#dict1 = dict1+dict2 TypeError: unsupported operand type(s) for +: 'dict' and 'dict''''运行结果:None{0: 'lily', 1: 'jack', 2: 'lucy', '4': 'ruby'}'''
fromkeys(seq,[default]) 将seq转成字典,若没有指定默认value,则用None代替
dict1 = {0:'tom',1:'jack',2:'lucy'}dict2 = {0:'lily','4':'ruby'}list1 = ['aa','bb','cc']new_dict = dict.fromkeys(list1,10)print(new_dict)'''{'aa': 10, 'bb': 10, 'cc': 10}'''
一周总结:
列表list:保存多个元素,元素有顺序。可以通过下标找到对应的元素。可以增删改查。
元组tuple:保存多个元素,不可以增删改元素,可以查询元素。
字典dict:键值对保存元素,键唯一。可以增删改查。
转载地址:http://jzegn.baihongyu.com/