zoukankan      html  css  js  c++  java
  • python-字典方法(dict)知识整理

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # __author__:anxu.qi
    # Date:2018/11/30

    info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    "stu1103": "XiaoZe Maliya",
    }
    ############################  字典  dict  ##################################
    key-value 键值对的数据的集合
    可变的、无序的、key不重复

    字典是无序的

    字典的 key 是按照哈希来进行保存的,所以字典的key一定要能被哈希,被哈希就是不可变的。
    
    
          注:字典的key不能是:列表,字典
    
    
    字典的value 可以是任意值

    # 字典的每一个元素,都是键值对, 而且是无序的
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    ## 索引
    # print(user_info['age'])
    # 30

    ## 切片没有

    自定定义:两种方式都可以,推荐使用第一种

    字典定义 dict 定义 初始化
      d = dict() 或者 d = {}
      dict(**kwargs) 使用 name=value 初始化一个字典
      dict(iterable,**kwarg) 使用可迭代对象和name=value对 来构造字典 。
      不过可迭代对象必须是一个二元结构。
        d = dict(((1,'a'),(2,'b')) 或者 d = dict(([1,'a'],[2,'b']))

     


    ####################################### 多级字典的嵌套示例 #############################################

    # key 尽量不要写中文,因为有时候编码不一致,取不出来值
    av_catalog = {
    "欧美":{
    "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
    "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
    "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
    "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
    "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
    "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
    }
    av_catalog["大陆"]["1024"][1] = "可以再国内做镜像"
    print(av_catalog)

    # 打印所有的值 values()
    print(av_catalog.values())

    # 打印所有的key keys()
    print(av_catalog.keys())

    # 字典是无序的,是没有下标的,可以根据key来获取具体的值
    #################### 字典 查 #################################
    print(info)
    # {'stu1103': 'XiaoZe Maliya', 'stu1102': 'LongZe Luola', 'stu1101': 'TengLan Wu'}
    # 方式一:
    print(info["stu1101"]) # info 存在则不会报错,不存在就会报错

    # 方式二
    print(info.get("stu110113")) # get 有就返回该值,没有这个值就返回None
    # None
    # TengLan Wu

    # 方式三: in
    print("stu1103" in info) # 等与 python2.x info.has_key("stu1103")

    #################### 字典 改 #################################
    info["stu1101"] = "武藤兰" # 存在直接替换
    print(info)
    # {'stu1102': 'LongZe Luola', 'stu1101': '武藤兰', 'stu1103': 'XiaoZe Maliya'}

    #################### 合并更新 update ####################################
    a = {
    'stu01':"nginx",
    'stu02':"mysql",
    'stu03':'zabbix'
    }
    b = {
    'stu01':"tami",
    1:3,
    2:5
    }
    a.update(b)
    print(a)
    # {'stu03': 'zabbix', 'stu02': 'mysql', 2: 5, 'stu01': 'tami', 1: 3}
    # 把b作为一个参数传为了update,把两个字典合并,如果a字典中有和b字典中相同的key,则覆盖a中的value
    # 如果没有这个kye那么,将b中的key和value都添加到a字典中

    #################### 字典 增 ##################################

    info["stu1104"] = "CangJingkong" # 不存在则创建一条
    print(info)
    # {'stu1104': 'CangJingkong', 'stu1102': 'LongZe Luola', 'stu1101': '武藤兰', 'stu1103': 'XiaoZe Maliya'}

    # 创建一个新的值 ,去字典里能取到我就返回,如果取不到我就设置一个新的。
    av_catalog.setdefault("TaiWan", {"www.baiddu.com":[1, 2]})


    #################### 字典 删 ##################################
    # 方式一:
    del info["stu1101"]
    print(info)
    # {'stu1104': 'CangJingkong', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
    # 方式二:
    info.pop("stu1102") # 删除指定的元素,并可以拿到结果
    print(info)
    # {'stu1103': 'XiaoZe Maliya', 'stu1104': 'CangJingkong'}
    # 方式三: 随机删除一个元素,并可以拿到结果
    info.popitem()
    print(info)
    # {'stu1103': 'XiaoZe Maliya'}

    c = {
    'stu01': "tami",
    1: 3,
    2: 5
    }

     

    # 只能等遍历时,收集好对应的key或者是value,再做处理

    
    
    #####################  for 循环 #################
    # 循环字典的key 和 value
    # 注:以下方式一和方式二的区别:结果都是一样的,但是方式一比方式二高效很多,
    # 因为方式一只是通过key,找到key和value,方式二是将字典转换为列表后,通过key,value找到对应的值
    # 数据量不大还可以,数据量大的情况下非常占用资源费时间。
    # 方式一:
    for i in a:
    print(i,a[i])
    # stu03 zabbix
    # stu01 nginx
    # stu02 mysql
    # 方式二:
    for k,v in a.items():
    print(k,v)
    # stu03 zabbix
    # stu01 nginx
    # stu02 mysql
    ########################  keys #######################
    # 加上keys后,会输出所有的key
    for i in user_info.keys():
    print(i)
    """
    gender
    name
    age
    """
    ######################## values #######################
    # 加上values后,会输出所有的value
    for i in user_info.values():
    print(i)
    """
    Vmiss
    Vsidaodeng
    V30
    """
    ######################## items #######################
    # 加上items 后,会输出所有的item
    for k,v in user_info.items():
    print(k,v)
    """
    Kname Vsidaodeng
    Kgender Vmiss
    Kage V30
    """
    ##########################################################

    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    # 获取字典的所有的key
    print(user_info.keys())
    # dict_keys(['age', 'gender', 'name'])

    # 获取字典的所有的值
    print(user_info.values())
    # dict_values([30, 'M', 'sidaodeng'])

    # 获取字典所有的键值对
    print(user_info.items())
    # dict_items([('age', 30), ('name', 'sidaodeng'), ('gender', 'M')])


    ################################ del 删除 ##################################################
    # 删除字典中的某个键值对
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    del user_info['Kage'] # 指定key,可以直接进行删除
    print(user_info,11110000000)
    # {'Kname': 'Vsidaodeng', 'Kgender': 'Vmiss'} 11110000000


    ############################### clear 清空字典 ##########################################
    # def clear(self): # real signature unknown; restored from __doc__
    # 清除所有内容
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    user_info.clear()
    print(user_info)
    # {} # 返回一个空字典


    ############################### copy 浅复制 ##########################################
    # def copy(self): # real signature unknown; restored from __doc__
    # 浅copy
    举例:
    # ##################### 静态方法:fromkeys #####################
    # 初始化一个字典,并附一个临时的值,和浅copy 类似,只copy一层。
    d = dict.fromkeys([6,7,8]) #根据序列,创建字典

    d = dict.fromkeys([6,7,8],[100])
    注:如果后面是引用类型,那么都是copy的门牌号

    print(d)
    # {8: None, 6: None, 7: None}

    d = dict.fromkeys([6,7,8],"test")
    print(d)
    # {8: 'test', 6: 'test', 7: 'test'}
    d = dict.fromkeys([6,7,8],[1,{"name":"alex"},444])
    print(d)
    # {8: [1, {'name': 'alex'}, 444], 6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444]}
    d[7][1]['name'] = "Jack wang"
    print(d)
    # {8: [1, {'name': 'Jack wang'}, 444], 6: [1, {'name': 'Jack wang'}, 444], 7: [1, {'name': 'Jack wang'}, 444]}
    # ##################### get 方法 #####################
    根据key获取值,key不存在时,并制定默认值为None
    def get(self, *args, **kwargs): # real signature unknown
    """ Return the value for key if key is in the dictionary, else default. """
    pass


    ############################### get 获取值 ##########################################
    # def get(self, k, d=None): # real signature unknown; restored from __doc__
    # 根据key获取值,如果key不存在,可以指定一个默认值。d是默认值
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    aa = user_info.get('Kname') # 如果有这个值,就会打印出来value值
    print(aa)
    # Vsidaodeng

    aa = user_info.get('Knameadasfad') # 如果没有这个kye,就会打印None,但是不会报错
    print(aa)
    # None

    # get 添加默认值
    aa = user_info.get('Kage','123') # 如果存在这个key,就会将对应的value打印出来
    print(aa,1111)
    # V30 1111
    aa = user_info.get('Kage111','123') # 如果没有aeg111这个key,那么就会给一个默认值123
    print(aa)
    # 123
    注:get是获取,不会改变原来的字典

    # 通过索引也可以取,如果没有这个key,就会报错
    # 所以,推荐使用,get("key") 来获取。

    ############################### in 是否存在 ##########################################
    # 是检查字典中否有对应的key
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    aaaa = 'Kname' in user_info.keys()
    print(aaaa)
    # True

    aaaa = 'Kname1231' in user_info.keys()
    print(aaaa)
    # False


    ############################### iteritems ##########################################
    # def iteritems(self): # real signature unknown; restored from __doc__
    # 项可迭代
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    # 先不说,后期补充

    ############################### pop 移除 ##########################################
    # def pop(self, k, d=None): # real signature unknown; restored from __doc__
    # 获取某个key,并在字典中移除掉
    注:pop 出来的是一个value,不是k,v对。
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    bb = user_info.pop('Kage')
    print(bb)
    # V30
    print(user_info)
    # {'Kgender': 'Vmiss', 'Kname': 'Vsidaodeng'}

    #
    ############################### popitem 随机移除 ##########################################
    # def popitem(self): # real signature unknown; restored from __doc__
    返回一个二元组 ,
    可以使用 k,v = d.popitem

    # 获取并在字典中移除,随机移除。
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }
    bbbb = user_info.popitem()
    print(bbbb)
    """
    ('Kage', 'V30')
    ('Kgender', 'Vmiss')
    ('Kname', 'Vsidaodeng')
    """

    ############################### setdefault 设置值 ##########################################
    # def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
    # 设置值,但是如果已经存在,则不设置,并获取当前key对应的值
          如果不存在,会进行添加,并获取已经添加的值
    # 如果key不存在,则创建,如果存在,则返回已存在的值且不修改
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }



    ############################### update 更新 ##########################################
    # def update(self, E=None, **F): # known special case of dict.update
    # 批量更新

    # 已经存在的更新掉,不存在的则添加
    方式二:
    user_info = {
    "Kname":"Vsidaodeng",
    "Kage":"V30",
    "Kgender":"Vmiss"
    }

    he = {
    "a":1,
    "b":2,
    "c":3
    }
    user_info.update(he)
    print(user_info)
    # {'b': 2, 'Kgender': 'Vmiss', 'Kage': 'V30', 'a': 1, 'c': 3, 'Kname': 'Vsidaodeng'}
    ########################### update 添加 #############################################
    he = {
    "a":1,
    "b":2,
    "c":3
    }

    # 方式一:

    he.update({"d":4})

    print(he)

    # {'b': 2, 'c': 3, 'd': 4, 'a': 1}

    # 方式二:

    he["e"]=5
    # print(he)
    # {'b': 2, 'c': 3, 'd': 4, 'a': 1}
    举例说明:
    ttt = (11,22,["alex",{"k1":"v1"}])

    ttt[2][1]["k2"] = "v2" # 方式一等同于下面的方式二
    ttt[2][1].update({"k2":"v2"})      # 方式二

    print(ttt)
    # (11, 22, ['alex', {'k2': 'v2', 'k1': 'v1'}])
     

     字典dict 的key:
      set 集合 的元素就可以看做key,set可以看做dict的简化版
      hashable 可哈希才可以作为key,可以使用 hash() 测试
      key 不允许重复
      只要是将key用好了,就把字典用好了。

     

     

    我的目标是每天厉害一点点
  • 相关阅读:
    Java——字符串操作
    算法——Java实现队列
    算法——Java实现栈
    算法——线性表之链式存储结构
    算法——线性表之顺序存储结构
    Java——单双引号的区别
    Hystrix源码解析
    Eureka源码探索(一)-客户端服务端的启动和负载均衡
    dubbo源码研究(一)
    dubbo-springboot入门级demo
  • 原文地址:https://www.cnblogs.com/sidaofeng/p/9994796.html
Copyright © 2011-2022 走看看