zoukankan      html  css  js  c++  java
  • 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("{}	{}".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("请输入数字!")
  • 相关阅读:
    bash shell if 命令参数说明
    Linux test命令
    javascript获取事件触发源
    PHP Manual 学习
    js 控制iframe 刷新
    WP7交互特性浅析及APP设计探究
    FirstDayStart点点
    关于Safari的思考(转载)
    如何使控件背景色支持TransparentKey(at Win2k/WinXP 32bit Color Desktop)
    [Bug] VisualStyleRenderer may cause GDI leak!
  • 原文地址:https://www.cnblogs.com/Cheryol/p/9599905.html
Copyright © 2011-2022 走看看