python基础day6_字典dict

数据类型划分:可变数据类型、不可变数据类型

  不可变数据类型(又叫可哈希):元祖,bool ,int,str,

  可变数据类型(又叫不可哈希):list,dict,set(集合)

dict的key必须是不可变数据类型,可哈希

   value可以是任意数据类型

dict 优点:二分查找进行查询

     储存大量的关系型数据

  特点:无序的(python3.5及之前)

 增---setdefault、直接加

dic = { 'name':'cheryol','age':18,'sex':'female',}
dic['high'] = 168#没有键值对,添加
dic['age'] = 16#如果有键,则值覆盖

dic.setdefault('weight',100)
dic.setdefault('name','jack')#有键值对,不做任何改变,没有才添加

删 ---pop 、popitem、del、clear

dic = { 'name':'cheryol','age':18,'sex':'female',}
dic.pop('age')  #有返回值,按照键删除pop和get类似
print(dic)  #   结果{'name': 'cheryol', 'sex': 'female'}

dic.pop('what')
print(dic)  #   此时就会报错,因为字典中不存在what

dic.pop('what',None)#可设置返回值
print(dic)  #   此时不会报错
print(dic.pop('what','智障,没这个键')) #  输出提示“智障,没这个键”
dic = { 'name':'cheryol','age':18,'sex':'female',}
s = dic.popitem()   #3.5随机删除,3.6删最后一个,有返回值(是元组),返回删除的键值对
print(s,dic)  #结果{('sex', 'female') {'name': 'cheryol', 'age': 18}
dic = { 'name':'cheryol','age':18,'sex':'female',}
del dic['name']
print(dic) # {'age': 18, 'sex': 'female'}
del dic['name1']
print(dic) # 此时将会报错,所以用pop更好
del dic #删除字典
dic = { 'name':'cheryol','age':18,'sex':'female',}
dic.clear() #清空字典

改---update

dic = { 'name':'cheryol','age':18,'sex':'female',}
dic2 = {"name":"alex","weigth":150}
dic2.update(dic)    #把所有dic的键值对更新到dic2中(没有的键值对就加进去,有的就覆盖)
print(dic)#{'name': 'cheryol', 'age': 18, 'sex': 'female'}
print(dic2)#{'name': 'cheryol', 'weigth': 150, 'age': 18, 'sex': 'female'}

查---查询的时候将dict当成list即可(习惯用get)

dic = { 'name':'cheryol','age':18,'sex':'female',}
print(dic.keys(),type(dic.keys()))  #dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
print(dic.values(),type(dic.values()))  #dict_values(['cheryol', 18, 'female']) <class 'dict_values'>
print(dic.items(),type(dic.items()))  #dict_items([('name', 'cheryol'), ('age', 18), ('sex', 'female')]) <class 'dict_items'>

for i in dic:  #直接写dic,默认打印dic的键(等价于for i in dic.keys():)
     print(i)  #[name,age,sex]
     
print(dic['name'])  #结果cheryol(存在即输出,不存在则报错)
print(dic.get('name1','没有这个键'))  #不会报错,可以自行设置返回值(和pop类似)

例子

#实现a,b互换
a,b = 1,2
a,b =b,a
print(a,b) #2,1

for k,v in dic.items():
     print(k,v)
'''
结果
name cheryol
age 18
sex female
'''

 实例

字典实例1:输入一串字符,统计相连相连数字的个数

info = input('input:').strip()#输入34 fd3243refd321
for i in info:
    if i.isalpha():
       info = info.replace(i," ")
    l = info.split()
print(len(l))#输出3,此时的l为['34', '3243', '321']

字典实例2:

  将大于66的值保存在字典的第一个key中,将小于66的值保存在字典的第二个key中。

  即 { 'k1':大于66的所有值列表,'k2':小于66的所有值列表}

li = [11,22,33,44,55,66,77,88,99,90]
dic = {}
lda = []
lxiao = []
for i in li:
    if i == 66:continue
    if i > 66:
        lda.append(i)
    else:
        lxiao.append(i)
dic.setdefault('k1',lda)
dic.setdefault('k2',lxiao)
print(dic)
#结果{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]}

字典实例3:

输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机","电脑","鼠标垫","游艇"]
要求:1:页面显示 序号+商品名称,如:
1 手机
2 电脑
...
2: 用户输入选择的商品号,然后打印出该商品的名称
3:若用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序
flag = 1
while flag:
    li = ["手机","电脑","鼠标垫","游艇"]
    for i in li:
        print("{}\t{}".format(li.index(i)+1,i))
    choice = input("输入选择的商品号(输入Q或者q,退出程序):")
    if choice.isdigit():
        choice = int(choice)
        if choice >= 1 and choice < len(li):
            print("对应商品:" + li[choice-1])
        else:
            print("输入有误,重新输入")
    elif choice.upper() == 'Q':break
    else:print("请输入数字!")

 

posted @ 2018-09-06 17:44  大脸猫12581  阅读(155)  评论(0编辑  收藏  举报