zoukankan      html  css  js  c++  java
  • python字典

    字典介绍


    python内置字典:dict,在其他语言中也称map;

    使用键值存储,具有极快的查找速度;

    键值对作为元素,字典中可以包含多个键值对,键和值的类型不做限制;

    键不能重复,如果相同则会覆盖,值可以重复;

    字典是无序的,因此不能通过下标的方式来操作;

    In [1]: stus={"name":"zyj","score":100}  #创建一个字典
    
    In [2]: stus
    Out[2]: {'name': 'zyj', 'score': 100}
    
    In [10]: stus["name"]="sl"  #键不能重复,相当与修改之前键对应的值
    
    In [11]: stus
    Out[11]: {'name': 'sl', 'score': 100}
    
    In [3]: stus[1]  #不支持下标的方式查找
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-3-9b18ab9e3e1b> in <module>()
    ----> 1 stus[1]
    
    KeyError: 1
    
    In [4]: stus["name"] #根据键去查找对应的值
    Out[4]: 'zyj'
    
    In [5]: stus["sex"]  #查找的键不存在时会报错
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-5-92cfcdd3fb2f> in <module>()
    ----> 1 stus["sex"]
    
    KeyError: 'sex'
    
    In [6]: stus.get("name") #可以使用get方法查找键对应的值
    Out[6]: 'zyj'
    
    In [7]: stus.get("address") #get方法查找不存在的键时不会报错,返回None
    
    In [8]: 
    
    In [8]: address=stus.get("address")
    
    In [9]: 
    
    In [9]: type(address)  
    Out[9]: NoneType  #返回的类型
    
    In [10]:

    常用操作:增删改查

    In [12]: stus
    Out[12]: {'name': 'sl', 'score': 100}
    
    In [13]: stus["sex"]="gril"  #键不存时就是增加
    
    In [14]: stus
    Out[14]: {'name': 'sl', 'score': 100, 'sex': 'gril'}
    
    In [15]: stus["sex"]="boy" #键存在时就是修改键对应的值
    
    In [16]: stus
    Out[16]: {'name': 'sl', 'score': 100, 'sex': 'boy'}
    
    In [18]: "name" in stus  #判断键是否在字典中存在,而不是判断值
    Out[18]: True
    
    In [19]: "sl" in stus
    Out[19]: False
    
    In [20]: stus["name"]  #如果有返回,则说明存在
    Out[20]: 'sl'
    
    In [21]: stus["add"] #如果返回报错,说明不存在
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-21-ced6c0266c9b> in <module>()
    ----> 1 stus["add"]
    
    KeyError: 'add'
    
    In [22]: del stus["sex"]  #删除其中的一个键值对
    
    In [23]: stus
    Out[23]: {'name': 'sl', 'score': 100}
    
    In [24]: del stus  #直接删除字典 也可以用clear清空字典,但是它不会回收内存
    
    In [25]: stus
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-25-44d38c6a3442> in <module>()
    ----> 1 stus
    
    NameError: name 'stus' is not defined

    字典中常见的函数

    In [1]: names={"name":"zyj","age":18,"sex":"gril"}
    
    In [2]: len(names)  #返回字典的长度
    Out[2]: 3
    
    In [6]: names.keys() #获取每个元素的键,作为列表输出
    Out[6]: dict_keys(['name', 'age', 'sex'])
    
    
    In [7]: names.values() #获取每个元素的值,
    Out[7]: dict_values(['zyj', 18, 'gril'])
    
    In [9]: for i in names.keys():
       ...:     print(i)
       ...:     
    name
    age
    sex
    
    In [10]: for i in names.values():
        ...:     print(i)
        ...:     
    zyj
    18
    gril
    
    In [11]: for item in names.items(): #获取所有的元素,返回的是元组。
        ...:     print(item)
        ...:     
    ('name', 'zyj')
    ('age', 18)
    ('sex', 'gril')
    
    #字典的迭代输出。
    In [12]: for item in names.items():
        ...:     print("key:%s,value:%s"%item) #字典的格式化输出,item本身就是元组,以前两个占位符的时候编写为%(a,b)也是元组。
        ...:     
    key:name,value:zyj
    key:age,value:18
    key:sex,value:gril
    
    In [15]: names
    Out[15]: {'name': 'zyj', 'age': 18, 'sex': 'gril'}
    
    In [16]: key="sex"
    
    In [19]: if names.has_key(key): #python3中不支持了,使用的比较少,一般使用in,has_key()返回布尔值,因此可以在if语句中作为条件使用
    
    ...: print("%在字典中"%key)
    ...: 
    ---------------------------------------------------------------------------
    AttributeError Traceback (most recent call last)
    <ipython-input-19-d7d5c595d57c> in <module>()
    ----> 1 if names.has_key(key):
    2 print("%在字典中"%key)
    3
    
    AttributeError: 'dict' object has no attribute 'has_key'
    
    
    
    In [17]: if key in names:
    ...: print("%s在字典中"%key)
    ...: 
    sex在字典中

    集合迭代输出补充:内置函数enumerate枚举,

    第一种:

      1 names=["zyj","sl","zs","ls"]
      2 names2=("zyj","sl","zs","ls")
      3 j=0
      4 print("number	name")
      5 for i in names:
      6     j+=1
      7     print("%d	%s"%(j,i))
    [root@localhost python]# python3 22.py 
    number  name
    1       zyj
    2       sl
    3       zs
    4       ls

    第二种:

      9 for i,item in enumerate(names):
     10     print("%d	%s"%(i,item))
    [root@localhost python]# python3 22.py 0 zyj
    1 sl 2 zs 3 ls

     序号从1开始:

      9 for i,item in enumerate(names,1):  #enumerate枚举,内置函数。
     10     print("%d	%s"%(i,item))
    [root@localhost python]# python3 22.py 
    1       zyj
    2       sl
    3       zs
    4       ls
    [root@localhost python]# 

    案例:学生管理案例升级版

    print("="*50)
    print("学生名字管理系统".center(50))
    print("输出1:添加学生")
    print("输出2:查找学生")
    print("输出3:修改学生")
    print("输出4:删除学生")
    print("输出5:查看所有学生")
    print("输出6:退出")
    #一个学生包含多个信息,一个学生一个字典,学生列表用列表来存储
    stus=[]
    while True:
        operate=input("请输入你想要的操作:")
        if operate=="1":
            name=input("请输入学生姓名:")
            age=int(input("请输入学生年龄:"))
            qq=input("请输入学生qq:")
    
            #一个学生包含三个信息,三个信息保存在一个字典中
            stu={}#申请一个字典变量
            stu["name"]=name #往字典变量中添加一个元素
            stu["age"]=age #往字典变量中添加一个元素
            stu["qq"]=qq #往字典变量中添加一个元素
    
            stus.append(stu)#stus自动会追加改变
            print(stus)
    
        if operate=="2":
            name=input("请输入要查找的学生姓名:")
            for item in stus:
                    if item["name"]==name.strip():#判断字典中包含该学生的姓名
                        print("%s 学生存在,年龄为:%s,QQ为:%s"%(item["name"],item["age"],item["qq"]))
                        break#找到后则整个循环终止,不会执行后面的else,全部循环执行完没有找到,才会执行else打印学生不存在
            else:#else与for对齐,因为要找到所有字典才能算找完,而不能与if对其,因为if执行一次只查找了一个字典,不能说明问题。
                print("学生%s没有找到"%name)
        if operate=="3":
           name=input("请输入你要修改的学生姓名:")
           for item in stus:
                if item["name"]==name.strip():
                    item["name"]=input("请输入修改后的姓名:")
              item["age"]=int(input("请输入修改后的年龄"))
              item["qq"]=input("请输入修改后的qq号:")
              print("已经修改完成")
              break
       else:
           print("你要修改的学生%s不存在"%name)
      if operate=="4":
         name=input("请输入要删除的学生姓名:")
         for item in stus:
           if item["name"]==name.strip():
             stus.remove(item) 
             print("学生%s已经删除"%name)
             break 
        else: 
           print("学生%s没有找到"%name)
        if operate=="5":
            print("序号	姓名	年龄	QQ号")
            for i,item in enumerate(stus,1):
                print("%d	%s	%s	%s"%(i,item["name"],item["age"],item["qq"]))
        if operate=="6":
            break
    
    
    ==================================================
    学生名字管理系统 
    输出1:添加学生
    输出2:查找学生
    输出3:修改学生
    输出4:删除学生
    输出5:查看所有学生
    输出6:退出
    请输入你想要的操作:1
    请输入学生姓名:zyj
    请输入学生年龄:18
    请输入学生qq:123333333
    请输入你想要的操作:1
    请输入学生姓名:sl
    请输入学生年龄:19
    
    请输入学生qq:232323232
    请输入你想要的操作:5
    序号 姓名 年龄 QQ号
    1 zyj 18 123333333
    2 sl 19 232323232
    请输入你想要的操作:2
    请输入要查找的学生姓名:sl
    sl 学生存在,年龄为:19,QQ为:232323232
    请输入你想要的操作:2 
    请输入要查找的学生姓名:ee
    学生ee没有找到
    请输入你想要的操作:3
    请输入你要修改的学生姓名:dd
    你要修改的学生dd不存在
    请输入你想要的操作:3
    请输入你要修改的学生姓名:zyj
    请输入修改后的姓名:zhaoyujiao
    请输入修改后的年龄18
    请输入修改后的qq号:11212121212
    已经修改完成
    请输入你想要的操作:5
    序号 姓名 年龄 QQ号
    1 zhaoyujiao 18 11212121212
    2 sl 19 232323232
    请输入你想要的操作:4
    请输入要删除的学生姓名:zh
    学生zh没有找到
    请输入你想要的操作:4 
    请输入要删除的学生姓名:zhaoyujiao
    学生zhaoyujiao已经删除
    请输入你想要的操作:5
    序号 姓名 年龄 QQ号
    1 sl 19 232323232
    请输入你想要的操作:6
    [root@localhost python]#                                           
  • 相关阅读:
    vuex状态管理demo
    vuex与redux,我们都一样
    vue-quill-editor + element-ui upload实现富文本图片上传
    总结移动端页面开发时需要注意的一些问题
    laravel 运行出错RuntimeException No application encryption key has been specified.
    JS 正则匹配 只匹配汉字
    LINUX统计一个文件中特定字符串出现的次数
    Nginx Log日志统计分析常用命令
    python之mysqldb模块安装
    PHP 可变参数 ( ... ) 和参数解包
  • 原文地址:https://www.cnblogs.com/zhaoyujiao/p/9016303.html
Copyright © 2011-2022 走看看