zoukankan      html  css  js  c++  java
  • 基本数据类型(dict)

    基本数据类型(dict)字典(键值对)

    ​ 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可的, 如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.

    • 格式: dict = {key1: value1, key2: value2....}
    • 已知的可哈希(不可变)的数据类型: int, str, tuple, bool
    • 不可哈希(可变)的数据类型: list, dict, set

    字典的特性 :

    • 查询的效率非常高, 通过key来查找元素
    • 字典比较消耗内存 最长用的数据: 字符串 列表 字典
    • 字典能够将数据进行关联
    • dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表 不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据

    字典的增删查改

    增加

    setdefault(设置默认值) dic.setdefault(key,value) 格式用逗号隔开

    直接用key添加

    dic = {}
    dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组合进dict
    dic['age'] = 18
    print(dic)
    # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
    dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值.
    print(dit) #  打印出来是 {'李嘉诚':None}
    dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作⽤
    print(dic)  #这时出现的是依旧是 {'李嘉诚':None}
    

    删除

    pop 弹 指定key 删除

    • dit.pop(key)

    popitem 随机删除

    • dit.popitem() 3.5版本以后默认删除最后一个

    del 指定删除

    • del dit[key] 字典没有索引 只能根据key去删除

    clear 清空

    • dit.clear() 清空字典

    修改

    利用key去修改

    update 更新 (用新的dict去跟新)

    第一种 :利用key去修改:
    dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"}
    dic['王木生'] = "刘伟" 
    print(dic)
    # 结果: {"刘能": "王小利", "赵四": "刘晓光", "王木生": "刘伟", "谢大脚": "于月仙"}
    
    第二种 :  update  更新
    dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"}
    dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰","王大拿": "金老板"}
    dic.update(dic2)
    print(dic)
    #结果 :{"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "于月仙","王大拿": "金老板"}     # 旧的覆盖,没改的不动,新加的补到最后
    

    查询

    直接用key

    • print(dic[key]) 如果key不存在会报错

    get 方法 dic.get(key,xx)key不存在,会显示xx

    • print(dic.get(key))
    如果key("sylar")不存在
    第一个  print(dic.get("sylar")) # None  系统默认会显示None
    print(dic.get("sylar", "⽜B"))  # ⽜B   如果key不存在,第二个逗号会显示出 "⽜B"
    

    setdefault() 新增后查询

    • 新增(先看有没有key, 如果有就过, 如果没有,执行新增)
    • 根据key把值返回,值也是新增也行是旧的
    • 第一步 : 执行新增流程. 第二步 : 查询结果
    dic = {}
    dic["盖伦"] = "德玛西亚之力"
    value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
    value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
    value3 = dic.setdefault("薇恩", "坑")
    
    print(value3)  结果 : "坑"
    print(dic)
    结果 : {"盖伦":"德玛西亚之力","菲奥娜":"无双剑姬","薇恩": "坑"}
    

    其他相关操作

    字典的遍历方式

    • dic遍历时,keys相当于是字典的索引,values可以看成keys对应的元素
    #  对字典的遍历 :
    dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
    第一种:
    #   print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
    for key in dic.keys():
        print(key)  # 拿到key
        print(dic[key]) # 拿到value
    
    第二种(最简化):
    #   print(dic.items())  # 拿到的是key和value
    for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
        print(k) # 元组的keys
        print(v) # 元组的与keys对应的values
    
    第三种(常用):
    字典本身是一个可迭代对象,可以直接进行for循环
    for el in dic:  # 直接拿到key
        print(el)   # keys
        print(dic[el])  # values
    
    打印元组:
    for item in dic.items():
        print(item) # 打印出的结果是 dic里每一个(key:value)
    

    enumerate 枚举 (,默认从0开始计) (类似range)

    dic = {1:11,2:22,3:33,4:44,5:55,6:66,7:77,8:88,}
    for i in enumerate(dic,1): # 也可以是dic.values / items
        print(i)
    # 打印结果 (默认显示的是keys)
    (1, 1)
    (2, 2)
    (3, 3)
    (4, 4)
    (5, 5)
    (6, 6)
    (7, 7)
    (8, 8)
    
    
    
    解包和枚举
    s = "wtf"
    d = {}
    for i, d[i] in enumerate(s):
        pass
    print(d)# 打印结果: {0:"w",1:"t",2:"f"}
    
    
    
    • keys() 获取所有键 这个返回的不是列表, 很像列表
    • values()获取所有的值
    • items() 获取所有的键值对. 返回的是元组

    解构

    • 解构, 直接把元组或者列表中的数据拿出来.
    • dict解包出来是 key
    # 解构
    a, b = 1, 2
    print(a, b)
    (c, d) = 3, 4
    print(c, d)
    e, f = [1, 2, 3] # 解构的时候注意数量必须匹配
    print(e, f)
    
    
    

    字典的嵌套

    与list相似,索引换成key

    # 字典的嵌套
    dic1 = {
     "name": "汪峰",
     "age": 18,
     "wife": {
     "name": '章⼦怡',
     "age": 28
     },
     "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
     "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
    }
    print(dic1.get("wife").get("name"))
    
    
    
  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/fanxss/p/10988094.html
Copyright © 2011-2022 走看看