• 字典简介、操作、内置函数、练习题


    字典

    定义:

      1、字典是一种可变的容器,可以存储任何类型的数据

      2、字典中的每个数据都是用‘键key’进行索引的,而不像序列(str list tuple)可以用整数进行索引

      3、字典的存储是无序的

      4、字典中的数据是以键key - 值 value 对(key_value对)形式形式存储

      5、字典的键不能重复,且只能用不可变类型做字典的键

    二、创建字典的字面值方式

      字典表示方式,用{}括起来,以冒号(:)分割键值对,各个键值对之间用逗号分开

      1、创建空字典

        d={}

      2、创建字典的构造函数

        dict{}  #生成一个空的字典,等同于 {}

        dict(iterable) #通过可迭代对象穿件一个字典

        dict(**kwargs)  #关键字传参的形式生成一个字典

        注意:字典的键必须为不可变类型的值

        可变的类型有 list()列表  dict()字典 set()集合

    三、字典的基本操作

      1、字典的索引

        语法:字典[键]

        作用:用来获取字典所对应的值

      2、字典的赋值

        语法:

          字典[键] = 值

        说明:键不存在时就创建并赋值、键存在则修改

      3、字典的删除

        del语句语法:

          del  dict['键']

      4、键判断键值或者键是否在字典中

         in  和 not in 运算符

        可以用in判断一个键是否存在于字典中,如果存在返回True ,不存在就返回False。not in 相反

        语法 :‘键’   in  dict   或者 ‘键’  not in dict 

    练习:写程序,实现以下功能:

        1、将如下数据形成一个字典d

         键     1                   2                    3                    4

         值   春季 有123月           夏季有456月             秋季有789月                        冬季有 101112月

        2让用户输入一个整数代表这个季节,打印这个季节对应信息,如果用户输入的信息不存在字典内,则提示用户‘信息不存在’ d={}d['1'] = '春季有1,2,3月'

    d['2'] = '夏季有4,5,6月'
    d['3'] = '秋季有7,8,9月'
    d['4'] = '冬季有10,11,12月'
    print(d)
    intnum = int(input('请输入一个整数'))
    if intnum == 1:
        print(d['1'])
    elif intnum == 2:
        print(d['2'])
    elif intnum == 3:
        print(d['3'])
    elif intnum == 4:
        print(d['4'])
    else:
        print('信息不存在')


    '''

    seasons = {
    1:'春季有123月',
    2:'夏季有456月',
    3:'秋季',
    4:'冬季',

    }

    '''

      

    d={}
    d['1'] = '春季有1,2,3月'
    d['2'] = '夏季有4,5,6月'
    d['3'] = '秋季有7,8,9月'
    d['4'] = '冬季有10,11,12月'
    print(d)
    intnum = input('请输入一个整数')
    if intnum.isdigit():     #判断是否是整数机制
        i=int(intnum)
        if i == 1:
            print(d['1'])
        elif i == 2:
            print(d['2'])
        elif i == 3:
            print(d['3'])
        elif i == 4:
            print(d['4'])
        else:
            print('信息不存在')
    else:
        print('您输入的信息不符合规范')
    

      

    #其实这个判断机制更巴适
    if
    intnum in d: print(d[intnum]) else: print('信息不存在')
    intnum = input('请输入一个整数')
    if intnum.isdigit():  #判断这个输入的字符串里面的东西是不是数字
        i=int(intnum)   #转换为int型
        if i in d:            #判断i是否在里面    
             print(d[i])
        else:
            print('信息不存在')
    else:
        print('您输入的不是数字')
    #最终,这个程序是不成功的,因为key 键,‘1’或者‘2’,它是字符串‘1’  不是int‘1’ 当我们将i转化为int的时候
    # 然后int 型的i 在key(key是字符串)中判断是否存在,当然是不存在。int 型的 1 和str型的 1 无法匹配比较


      

     四、字典的迭代对象

       字典是可迭代对象,只能对键进行访问

       for key ,value in dict.items(d):

         print(key,value)

    五、练习:输入一个字符串,打印这个字符串中出现过的字符和出现过的次数

          如:输入abcabcabca

            打印如下:

             a:2次

             b:3次

             c :6次

          注,不要求打印顺序

    Str1 = input('输入一些字符串')
    Dict1 = {}
    for key in Str1:
        if key in Dict1:
            Dict1[key] = Dict1[key] + 1
        else:
            Dict1[key] = 1
    for keykey,value in dict.items(Dict1):
        print(keykey,':',value,'次')
    print(Dict1)

    #运行结果

    输入一些字符串abaababcccgggggg6672636777
    a : 4 次
    b : 3 次
    c : 3 次
    g : 6 次
    6 : 4 次
    7 : 4 次
    2 : 1 次
    3 : 1 次
    {'a': 4, 'b': 3, 'c': 3, 'g': 6, '6': 4, '7': 4, '2': 1, '3': 1}

      

       六、可以用于字典的函数

      len(x) max(x) min(x) sun(x) any(x)

    七、字典的内置方法
    1、dict.clear()
        删除字典中所有元素
        这个方法没有参数,没有返回值
     2、dict.from(seq[,vslue])
        创建一个新的字典,以序列seq(seqs是一个tuple) 比如 seq = ('张三','李五','王二')中元素作为字典的键,value作为所有键对应的初始值
      参数: seq --字典键值列表
          value -- 可选参数,序列seq的值

       返回值:

          返回一个新的列表

      3、dict.get(key,default = None)

       返回指定键的值,如果指定键不在,则返回默认值。

            

      4、dict.items()

        以列表返回可遍历的(键, 值) 元组数组

      5、dict.keys()

       返回一个迭代器,可以使用 list() 来转换为列表。(以列表返回字典所有键)没有参数,返回一个字典所有键

      6、dict.update(dict2)

        把字典dict2的键/值对更新到dict里(相当于把dict2中的数据追加到dict1中)

      参数:dict2

      没有返回值

      7、dict.values()

        没有参数

        以列表返回字典中所有值

      8、pop(key.[,default])

        删除字典给定键所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值

        参数:

          key:要删除的键值

          default:如果没有key,返回default值

        返回值:

          返回被删除的值

      9、popitem()

        随机返回并删除字典中的一对键和值

        没有参数

        返回值

        返回一个键值对(key,value)形式

    八、字典和列表比较

       1、都是可变的容器

       2、索引方式不同,列表用整数索引,字典用键索引

       3、列表的储存是有序的,字典的储存是无序的

       4、字典插入删除修改速度快于列表(重点)

    练习:

      任意输入很多学生的姓名,成绩,年龄。每个学生信息存入字典中,然后再放入列表内

      每个学生信息需要手动输入:

          设计到深复制和浅复制的问题:看这儿 

      如:

        请输入姓名:tehs

        请输入年龄:15

        请输入成绩:99

        请输入姓名:tffs

        请输入年龄:asaa

        请输入成绩:1000

        请输入姓名:<回车> #结束输入

       内部存储格式如下:

        infors = [{'name':'tehs','age':18,'score':99},{'name':'china','age':66,'score':98  }

          1、打印以上列表:

        2、按一下下表格打印学生信息

        +-----------+---------+--------+

         姓名        年龄     成绩

    Student = {}
    infors = []
    List = []
    num = 0
    while num <= 1:
    
            student_name = input('请输入学生姓名:')
            Student['name'] = student_name
            student_age = input('请输入学生年龄')
            Student['age'] = student_age
            student_score = input('请输入学生成绩')
            Student['score'] = student_score
            infors.append(Student.copy()) #使用一哈浅拷贝 如果不用copy,两个infors两个元素都会被覆盖成一个元素
            num += 1
    print('循环退出')
    
    print('+------  +---------+---------+')
    print('| 姓名   |  年龄    |   成绩  | ')
    print('+--------+---------+---------+')
    for value1 in infors[0].values():
        print('|  ',value1,'  ',end = '')
    print('|
    +--------+---------+---------+')
    for value2 in infors[1].values():
        print('|  ',value2,'  ',end = '')
    print('|
    +--------+---------+---------+')
    

      运行结果:

    请输入学生姓名:小强
    请输入学生年龄44
    请输入学生成绩100
    请输入学生姓名:王小
    请输入学生年龄66
    请输入学生成绩106
    循环退出
    +------  +---------+---------+
    | 姓名   |  年龄    |   成绩  | 
    +--------+---------+---------+
    |   小强   |   44   |   100   |
    +--------+---------+---------+
    |   王小   |   66   |   106   |
    +--------+---------+---------+
    
    Process finished with exit code 0

    打印名片管理系统:

    要求:1、添加一个名片

       2、删除一个名片

       3、修改一个名片

       4、查询一个名片

          5、显示所有名片

       6、退出系统

      提示:card_infors = [{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

    {'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

    {'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},

    ....

    ]

    print("welcome Card System")
    
    Card_infors=[] #用列表来存储名片
    print('1、添加新名片,2、删除一个名片,3、修改一个名片,4、查询一个名片,5、显示所有名片,6退出')
    while True:
        Card = {}
        FunctionChoose = input("选择操作序号:
    ")
        #获取用户输入,根据数据执行相应功能
        if FunctionChoose == '6':
            break
            print("退出系统")
    
        elif FunctionChoose == '1':
            Card["name"] = input("输入添加卡片名:")
            Card["qq"] = input("输入QQ号:")
            Card["weixin"] = input("输入微信号:")
            Card["addr"] = input("输入地址:")
            Card_infors.append(Card)
            print('添加成功!')
    
        elif FunctionChoose == '2':
            print(Card_infors,"这是所有的名片,请输入被删除名片的名字")
            name = input()
            find_flag = 0
            for temp in Card_infors:
                if temp['name'] == name:
                    print()
                    del Card_infors[Card_infors.index(temp)]
                    find_flag = 1
                    print("删除成功!")
                    break
            if find_flag == 0:
                print("删无此人")
    
    
        elif FunctionChoose == '3':
             print('选择你要修改的那个人名片的名字')
             xgname = input()
             find_flag = 0
             for temp in Card_infors:
                 if temp['name'] == xgname:
                     Card["name"] = input("输入修改的卡片名:")
                     Card["qq"] = input("输入修改的QQ号:")
                     Card["weixin"] = input("输入修改的微信号:")
                     Card["addr"] = input("输入修改的地址:")
    
                     Card_infors[Card_infors.index(temp)]=Card
                     print("修改成功!")
                     find_flag = 1
             if find_flag == 0:
                  print("修无此人")
        elif FunctionChoose == '4':
            name = input("输入你要查询的人的名字")
            find_flag = 0
            print("姓名	qq	微信	地址")
            for temp in Card_infors:
                if temp["name"] == name:
                    print(temp['name'],' ',temp['qq'],' ',temp['weixin'],'  ',temp['addr'])
                    find_flag =1
    
            if find_flag == 0:
                print("查无此人")
        elif FunctionChoose == '5':
            print('所有的信息',Card_infors)
        else:
            pass
    

      

  • 相关阅读:
    软工假期预习作业1
    2号团队-团队任务4:每日立会(汇总)
    2号团队-团队任务4:每日立会(2018-11-26)
    2号团队-团队任务4:每日立会(2018-11-27)
    第二小组首次会议记录
    第二次作业
    自我介绍+课后作业1:准备
    Linux安装redis
    Redis面试题
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/followlqc/p/11058007.html
Copyright © 2020-2023  润新知