8、元组和字典的应用

8、元组和字典的应用

#dictionary 字典
'''
 应用:
 貂蝉 --- ['屠龙刀','手榴弹']  800
 诸葛亮 ---['鹅毛扇','碧血剑','98k枪']  300
 
 字典: 
  特点:
  1. 符号:{}
  2. 关键字: dict
  3. 保存的元素是:key:value  -对


 列表    元组    字典
 []      ()      {}

 list   tuple   dict
 ele     ele   key:value


[].append(8)

element  元素

'''

# 定义

dict1 = {}   # 空字典

dict2 = dict()  # 空字典    list1 = list()  空列表   tuple1= tuple()  空元组

dict3= {'ID':'93848304309403','name':'lucky','age':18}   # ['7384938493','lucky',18]

# dict4 = dict(('name','lucky'))   # {'name':xxx,'lucky':xxx}
# print(dict4)

dict4 =dict([('name','lucky'),('age',18)])   # 'name':'lucky','age':18
print(dict4)


dict5 = dict([(1,2),(4,5),(6,8),(9,0)])
print(dict5)

# 注意:list可以转成字典 但是前提:列表中元素都要成对出现

# 字典的增删改查:

# 增加: 格式:dict6[key]=value
# 特点:  按照上面的格式,如果在字典中存在同名的key,则发生值的覆盖(后面的值覆盖原来的)。
#        如果没有同名的key,则实现的添加功能(key:value添加到字典中)
dict6 = {}

dict6['brand']='huawei'

print(dict6) #  {'brand':'huawei'}

dict6['brand']='mi'

print(dict6)

dict6['type']='p30 pro'

dict6['price']=9000

dict6['color']='黑色'

print(dict6)

'''
案例:
用户注册功能

username
password
email
phone


'''

print('------------欢迎来到智联招聘用户注册--------------')
# 模拟数据库
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

	user['email']=email
	user['phone']=phone

	# 保存到数据库
	database.append(user)

	answer = input('是否继续注册?(y/n)')

	if answer!='y':
		break


print(database)
for user in database:
	print(user)  #{}
'''
增加元素(key:value):
dict[key]=value   ----> {key:value}

特点: key在字典中是唯一的,value值可以是不唯一  
{'name':'tom','name':'aaa'}  错误定义
{'张三':100,'李四':100,'王五':100}  正确


增加元素对比:
list1 = []
list1.append(element)

dict1 ={}
dict1[key]=value

修改:
list1[index]=newvalue

dict1[key]=newvalue

查询元素:
list1[index]  ----> element

dict1[key]  ---> value

取值:字典都是根据key获取value值

'''

list1 = [3,5,7,8]

print(list1[2])  # 列表中找元素根据下标

dict1 = {'1':'张三','2':'李四','3':'王五'}

print(dict1['2'])  # 字典中找元素根据key

dict2= {'张三':100,'李四':100,'王五':89,'赵柳':99} 

print(dict2['王五'])  # key


# 尝试对字典遍历

for i in dict2:
	print(i)

# 单独遍历字典的结果是: 字典的key

# 字典里面的函数:
# items()  values()  keys()

print(dict2.items())

# 考试分数大于90分人
# for i in dict2.items():
# 	print(i)  # ('zhangsan',100)

# a,b =('aa','bb')
for key,value in dict2.items():
	# print(key,value)
	if value>90:
		print(key)


# values: 取出字典中所有值,保存到列表中
result = dict2.values()
print(result)

# 求所有学生考试成绩平均分
for score in dict2.values():
	print(score)

scores = dict2.values()

totle = sum(scores)

avg = totle/len(scores)

print(avg)


# keys(): 获取字典中的所有key键   (键值对)

names = dict2.keys()
print(names)

for name in names:
	print(name)


# 找人: in   也可以用于字典操作    用于判断元素有没有在字典的key中出现

# 8 in list1  

print('王五' in dict2)

'''
 1. 根据key获取值,如果key在字典中没有存在则报出keyError
    dict[key] ---->  value
 2. 字典的内置函数: 
    get(key)  ----> value  如果取不到值则不会报错,则返回None
	get(key,default) ---> value 如果能够取到值则返回字典中的值,如果取不到则返回default的值
    
    items()---> list
    keys() ---> list
    values() ---> list

'''

# print(dict2['赵飞'])

print(dict2.get('赵飞',99))
# 增加  改  查 (key)删除
# 删除:
list1=[3,7,9,0]

del list1[1]

print(list1)


dict1 = {'张三':100,'李四':100,'王五':89,'赵柳':99} 

del dict1['王五']

print(dict1)

# del dict1['haha']  # keyError

# 字典的内置函数:删除
# dict1.remove('李四')  不存在   报错的
# pop(key[,default]) ----> 根据key删除字典中的键值对,返回值是   只要删除成功,则返回键值对的值value
#                          pop的默认值,往往是在删除的时候没有找到对应的key,则返回default默认值

result = dict1.pop('李四','80')  
print(result)

result = dict1.pop('张小三','字典中没有此键')
print('======>',result)

print(dict1)


print('*'*30)
# popitem():随机删除字典中键值对(一般是从末尾删除元素)  

dict1 = {'张三':100,'李四':100,'王五':89,'赵柳':99} 

result = dict1.popitem()
print(result)

print(dict1)

result = dict1.popitem()
print(result)

print(dict1)


# clear() 同列表的clear()

dict1.clear()

print(dict1)

'''
删除:
del dict[key]

dict.pop(key[,default])

dict.popitem()

dict.clear()

'''


'''
其他的内置函数:
update()    []+[]  合并操作
fromkeys(seq,[default])  ---->将seq转成字典的形式 如果没有指定默认的value则用None
          new_dict = dict.fromkeys(list1)---》      {'aa': None, 'bb': None, 'cc': None}
                         ---> 如果指定default,则用default替代None这个value值
		new_dict = dict.fromkeys(list1,10)	---》	  {'aa': 10, 'bb': 10, 'cc': 10}

'''

# dict1 = dict1+dict2   报错的
# print(dict1)

dict1= {0:'tom',1:'jack',2:'lucy'}

dict2 = {0:'lily','4':'ruby'}

result = dict1.update(dict2)
print(result)

print(dict1)

list1 = ['aa','bb','cc']
new_dict = dict.fromkeys(list1,10)
print(new_dict)
a,b=(1,2),(3,3)
d,c=4,6
dict1={a:b,d:c}
print(dict1)
print('$'*30)
a,c=c,a
dict1={a:b,d:c}
print(dict1)
'''
总结列表:
list
1. 定义

l = [] 空列表
l = ['aaa']

2.符号:
+   ----》 合并 []+[]
*  ----->  [] * n
in  ----> a in [] False True
not in ---->
is  地址是否相等 
not is


3.系统中给列表用函数:
len(list) ----> int
sorted(list)  ----> 排序
max()  最大值
min()  最小值
list()  强制转换成列表类型
enumerate(list) 枚举  index  value

4. 列表自身函数:
添加元素:
   append()   末尾添加
   extend()   末尾添加一组元素
   insert()   指定位置插入

删除:
    del list1[index]

    remove(obj)  删除指定的元素,如果指定的元素不存在则报异常

    pop()  队列  FIFO   栈  FILO  默认删除的是最后一个元素

    clear() 清空元素

其他:
    count()   指定元素的个数
    sort()    排序  
    reverse()  翻转   [4,6,8,9,0]  --->  [0,9,8,6,4]

算法:
   选择排序
   冒泡排序
'''

'''
 元组:
 类似列表(当成容器)
 特点:
 1. 定义的符号:()  
 2. 元组中的内容不可修改
 3. 关键字: tuple   

    列表                 元组

    []                  ()
    [1]                  (1,)
    [1,2]                (1,2)
'''

t1 = ()
print(type(t1))  # <class 'tuple'>

t2 =('hello',)   
print(type(t2))

t3 = ('aa','bb')
print(type(t3))


# 
t4 =(3,5,7,8,1,4,7,8,9,0)

# 增删改  查

import random

list1=[]

for i in range(10):
	ran = random.randint(1,20)

	list1.append(ran)

print(list1)  # 

# tuple()   
# list() 
t5 = tuple(list1)
print(t5)

# 查询: 下标index  切片 [:] 
print(t5[0])
print(t5[-1])

print(t5[2:-3])
print(t5[::-1])

# 最大值  最小值

print(max(t5))
print(min(t5))

# 求和
print(sum(t5))

# 求长度
print(len(t5))

# 元组中的函数: 
# index(obj)  ---》 个数
# count(obj)  ---》 下标位置

print(t5.count(4))  # 个数

print(t5.index(4))  # 从t5这个元组中找出4的下标位置,没有报错:ValueError: tuple.index(x): x not in tuple
# 拆包

t1 =(4,7,3)

# a,b =t1   # ValueError: too many values to unpack(拆包) (expected(希望,盼望) 2)
# x,y,z=(6,) #ValueError: not enough values to unpack (expected 3, got 1)

a,b,c = t1

print(a,b,c)

a=t1

print(a)


# 变量个数与元组个数不一致
t1 = (2,5,8,9,7)

a,*_,c = t1
print(a,c,_)


a,c,*_ = t1
print(a,c,_)

a,b,*c =t1
print(a,b,c)


t1=(9,4,8,6)

a,*b=t1
print(a,b)  # *b 表示未知个数0~n, 0-- []   多个元素的话 ~ [1,2,3,4,...]

print(*b)
'''
  字符串  x,y,*z = 'hello'  ---> x='h'  y='e'  z=['l','l','o']
  列表  x,y,*z =['aa',6,'hello','good','happy','lucky']  ---> x='aa'  y=6  z=['hello','good','happy','lucky']

'''

'''
 t1=(9,4,8,6)

'''

t1=(9,)

x,*y = t1

print(x,y)  # 9,[]

# 添加元素
y.append('a')
y.append('b')
print(y)  # ['a','b']

print(*y)  # print()   print(4,8,6)  4 8 6

'''
元组:
1. 符号:(1,2,3)  tuple
2. 关键字:tuple
3. 元组的元素只能获取,不能增删改

符号:
+
*
is  not
in  not in 

系统函数:
max()
min()
sum()
len()
sorted()   ----> 排序,返回的结果就是列表
tuple()  ---->元组类型的强制转换

元组自带函数:
index() 
count()


拆装包:
x,*y =(1,2,3,4,5)
print(y)
print(*y)

'''

t2 = (4,5)+(1,2)

print(t2)

t3= (3,4)*2

print(t3)


print(t2 is t3)

print(3 not in t3)

print(len(t2))

print(tuple(sorted(t2)))

猜你喜欢

转载自blog.csdn.net/weixin_44908159/article/details/107185148