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用好了,就把字典用好了。

     

     

    我的目标是每天厉害一点点
  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/sidaofeng/p/9994796.html
Copyright © 2011-2022 走看看