zoukankan      html  css  js  c++  java
  • 🍖字典类型内置方法

    引入

    前面"Python开发入门"那一章已经对python基本的数据类型进行了大概的描述,以下我们主要从其内置方法来学习

    一.用途

    • key : value 的形式存多个值
    • 优点 : 存取都快, 每一个值都有对应的 key

    二.定义方式

    • "{ }" 内以逗号分隔开多个元素
    • 格式为 "key : value", 其中 key 必须为不可变类型, value 可以是任意类型
    • 字典类型对应的"工厂"就是dict
    dic = {"name" : "shawn","age" : 18}
    背后的操作就是
    dic = dict(name = "shawn", age = 18)
    

    三.数据类型转换

    res=dict([("k1",1111),("k2",2222),("k3",3333)])
    print(res)
    
    res=dict(x=111,y=222,z=333)
    print(res)
    
    ".fromkeys"方法在下面"需要掌握的方法"里详细介绍
    res={}.fromkeys(["name","age","gender"],None)
    print(res)
    

    四.常用操作 + 内置方法

    优先掌握的操作(*********)

    1.按照 key 取值, 可存可取

    按 "key" 存一个值
    dic = {"name":"shawn"}
    dic["age"] = 22
    print(dic)  #{'name': 'shawn', 'age': 22}
    
    也可以取值,改值
    dic["age"] = 18
    dic["name"] = dic["name"].upper()
    print(dic)  #{'name': 'SHAWN', 'age': 18}
    

    2、长度 : .len( )

    • 统计的是 key 的个数
    • 如果存在 key 相同的键值对, 那么以后入的为主
    以 "key" 来决定个数
    dic = {"name":"shawn","age":22,"sex":"man"}
    print(len(dic))  # 3
    
    有两个 "age", 以后面的为主(就相当于你后面修改了"age"的值一样)
    dic = {"name":"shawn","age":22,"sex":"man","age":18}
    print(dic)  #{'name': 'shawn', 'age': 18, 'sex': 'man'}
    

    3.成员运算 in 和 not in

    • 判断是不是字典的 key
    dic = {"name":"shawn","age":22,"sex":"man"}
    print("name" in dic)     #True
    print("age" not in dic)  #False
    

    4.删除 del, .pop( ), .popitem

    • del : 直接删除"谁", 通用万能删除, 它不支持赋值语法, 赋值会报错
    • .pop() : 根据 key 进行删除, 返回的值是 key 对应的 value
    • .popitem() : 无参数, 随机删除一个键值, 返回一个元组, 元组里第一个值是 key, 第二个值是对应的 value
    "del"
    dic = {"name":"shawn","age":22,"sex":"man"}
    del dic["name"]
    print(dic)  #{'age': 22, 'sex': 'man'}
    
    ".pop", 会返回删除的 "value"
    res = dic.pop('age')
    print(res)  #22
    print(dic)  #{'sex': 'man'}
    
    ".popitem"返回的值是元组, ("key", "value")
    dic = {"name":"shawn","age":22,"sex":"man"}
    res = dic.popitem()
    print(res)  #('sex', 'man')
    print(dic)  #{'name': 'shawn', 'age': 22}
    

    5.取值 : 键 .keys( ), 值 .values( ), 键值对 .items( )

    • .keys() : 只取 key
    • .values() : 只取 value
    • .items() : 既取 key, 又取 value
    • 以下加入 for 循环组合使用
    dic = {"name":"shawn","age":22,"sex":"man"}
    
    ".keys()"
    list=[]
    print(dic.keys())  #dict_keys(['name', 'age', 'sex'])
    for k in dic.keys():
        list.append(k)
    print(list)  #['name', 'age', 'sex']
    
    ".values()"
    list2 = []
    print(dic.values())  #dict_values(['shawn', 22, 'man'])
    for v in dic.values():
        list2.append(v)
    print(list2)  #['shawn', 22, 'man']
    
    ".items()"
    l1 = []; l2 = []
    print(dic.items())  #dict_items([('name', 'shawn'), ('age', 22), ('sex', 'man')])
    for k,v in dic.items():
        l1.append(k)
        l2.append(v)
    print(l1)  #['name', 'age', 'sex']
    print(l2)  #['shawn', 22, 'man']
    

    ps : Python2 当中的 键 .keys( ), 值 .values( ), 键值对 .items( ) 直接是列表输出的结果,比较占空间,而Python3中像是一只老母鸡, 想要就取一个

    "Python2" 中的字典取值
    >>> dic = {"name":"shawn","age":22,"sex":"man"}
    >>>
    >>> dic.keys()
    ['name', 'age', 'sex']
    >>>
    >>> dic.values()
    ['shawn', 22, 'man']
    >>>
    >>> dic.items()
    [('name', 'shawn'), ('age', 22), ('sex', 'man')]
    

    6.取值 .get( ) --->(寻找)

    • 上面提到可以使用 "dic[key]" 这种方式取值, 但找不到会报错
    • .get() : 参数为 key, 找不到返回 None, 容错性更好
    dic = {"name":"shawn","age":22,"sex":"man"}
    
    "dic[key]"找不到报错
    res = dic["xxxx"]
    print(res)  #报错
    
    ".get()"找到返回"value",找不到返回"None"
    res = dic.get("name")
    print(res)  #shawn
    res = dic.get("xxxx")
    print(res)  #None
    

    需要掌握的操作(****)

    1.更新 .update( )

    • 更新就是键值对的修改或增加
    • 就像一个软件, 新版本是在旧版本的基础上修改 BUG 或者增加功能
    • 对与老字典来说,更新指的是 : 新字典中有而老字典中没有则添加,新有而老也有则覆盖
    dic = {"name":"shawn","age":22}
    
    修改了 "age", 增加了 "sex"
    res = dic.update({"age":18,"sex":"man"})
    print(dic)  #{'name': 'shawn', 'age': 18, 'sex': 'man'}
    

    2.清空 .clear( )

    dic = {"name":"shawn","age":22,"sex":"man"}
    dic.clear()
    print(dic)  #{}
    

    3.初始化(造)一个字典模板 .fromkeys( )

    • 前一个参数是 key, 后一个参数是 value
    • 语法 : {}.fromkeys(['name','age','sex'],'xxxxxx')
    不使用 ".fromkeys" 建模板
    good_info={
        'name':None,
        'price':None,
        'count':None
    }
    
    使用 ".fromkeys()" 建模板
    dic = {}.fromkeys(['name','age','sex'],None)
    print(dic)  #{'name':None,'age':None,'sex':None}
    
    • 示例
    使用 "for" 循环
     list1=['name','price','count']
     dic={}
     for x in list1:
         dic[x]=None
     print(dic)  #{'name': None, 'price': None, 'count': None}
    使用 ".fromkeys()" 直接实现
    dic = {}.fromkeys(list1,None)
    print(dic)   #{'name': None, 'price': None, 'count': None}
    
    加入商品信息
    'mac'  20000  10   #商品信息
    dic['name']='mac'   #将商品信息加入到模板中
    dic['price']=20000  #价格
    dic['count']=10     #个数
    

    4.添加并返回值 .setdefaul( )

    • 如果字典里有要添加的 key, 则不修改, 并返回 key 对应的原 value
    • 如果字典里没有要添加的 key, 则添加, 并返回添加的 key 对应的新 value
    添加存在的 "key"
    dic={'name':'shawn','age':22}
    res=dic.setdefault('name','SHAWN')
    print('返回值:',res)   #返回值: shawn
    print(dic)            #{'name': 'shawn', 'age': 22}
    
    添加不存在的 "key"
    res=dic.setdefault('sex','man')
    print('返回值:',res)   #返回值: man
    print(dic)            #{'name': 'shawn', 'age': 22, 'sex': 'man'}
    

    五.总结

    • 可以存多个值

    • 无序, 取值是按 "key" 取对应的 "value"

    • 可变类型--->不可 hash 类型

  • 相关阅读:
    设计模式:迭代器模式
    设计模式:观察者模式
    设计模式:解释器模式
    设计模式:策略模式
    设计模式:状态模式
    设计模式:代理模式
    strtok函数
    人们眼中的程序员
    如何用C语言获取文件的大小
    C++著名库的比较和学习经验
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14027213.html
Copyright © 2011-2022 走看看